From ee504469130ea04f68c0966f129371ef0d597a5f Mon Sep 17 00:00:00 2001 From: Anton Telichenko Date: Wed, 3 Aug 2022 13:04:06 +0300 Subject: [PATCH 001/217] Update NodeJS.md (#75) Co-authored-by: Timur Shemsedinov --- Courses/NodeJS.md | 272 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 272 insertions(+) diff --git a/Courses/NodeJS.md b/Courses/NodeJS.md index 74a737e..4d7c254 100644 --- a/Courses/NodeJS.md +++ b/Courses/NodeJS.md @@ -151,3 +151,275 @@ ## Вспомогательные темы - [Асинхронный пул для worker thread pool в Node.js](https://youtu.be/Jj5KZRq4wYI) + +# Node.js (таймкоды) + +## [Node.js Введение в технологию](https://youtu.be/WBcHgaoHh1k) + +- [2:53 Основные идеи Node.js](https://youtu.be/WBcHgaoHh1k?t=173) +- [13:09 Приемущества/Недостатки JavaScript](https://youtu.be/WBcHgaoHh1k?t=789) +- [16:58 Что такое Node.js](https://youtu.be/WBcHgaoHh1k?t=1018) +- [20:52 Начало работы с Node.js](https://youtu.be/WBcHgaoHh1k?t=1252) +- [25:00 Встроенный API](https://youtu.be/WBcHgaoHh1k?t=1500) +- [33:55 Менеджер пакетов NPM](https://youtu.be/WBcHgaoHh1k?t=2035) +- [40:45 Структура проектов](https://youtu.be/WBcHgaoHh1k?t=2445) +- [44:35 Файлы package.json, package-lock.json](https://youtu.be/WBcHgaoHh1k?t=2675) +- [52:03 Репозиторий NPM](https://youtu.be/WBcHgaoHh1k?t=3123) +- [59:50 Однопоточность и многопоточность](https://youtu.be/WBcHgaoHh1k?t=3590) +- [1:05:30 Межпроцессовое взаимодействие](https://youtu.be/WBcHgaoHh1k?t=3930) +- [1:06:08 Асинхронный ввод/вывод](https://youtu.be/WBcHgaoHh1k?t=3968) +- [1:11:11 Производительность](https://youtu.be/WBcHgaoHh1k?t=4271) +- [1:13:02 Память](https://youtu.be/WBcHgaoHh1k?t=4382) +- [1:16:21 Отладка и профилирование](https://youtu.be/WBcHgaoHh1k?t=4581) +- [1:21:27 Ошибки](https://youtu.be/WBcHgaoHh1k?t=4887) +- [1:26:42 Обновление кода и перезапуск](https://youtu.be/WBcHgaoHh1k?t=5202) +- [1:28:43 Ассинхронное программирование](https://youtu.be/WBcHgaoHh1k?t=5323) +- [1:30:00 Примеры внедрения, интеракт. TV](https://youtu.be/WBcHgaoHh1k?t=5400) +- [1:31:00 Сферы применения Node.js](https://youtu.be/WBcHgaoHh1k?t=5460) +- [1:36:44 Полезные материалы](https://youtu.be/WBcHgaoHh1k?t=5804) + +## [Node.js в 2019 году (состояние и перспективы)](https://youtu.be/CUU49jjHloM) + +- [0:45 Node.js уже 10 лет](https://youtu.be/CUU49jjHloM?t=45) +- [5:39 Обзор новых возможностей Node.js](https://youtu.be/CUU49jjHloM?t=339) +- [18:14 Возможности для паралельного программирования на Node.js](https://youtu.be/CUU49jjHloM?t=1094) +- [20:08 Как работают thread и process в Node.js](https://youtu.be/CUU49jjHloM?t=1208) +- [20:47 Обзор последствий отсутствия изоляции в Node.js](https://youtu.be/CUU49jjHloM?t=1247) +- [20:33 Проблемы отсутствия изоляции в Node.js](https://youtu.be/CUU49jjHloM?t=1233) +- [38:27 Способы изоляции Node.js кода](https://youtu.be/CUU49jjHloM?t=2307) +- [48:24 Изоляция и кластеризации с threads в Node.js v12](https://youtu.be/CUU49jjHloM?t=2904) +- [56:59 Области применения Node.js: Локальные приложения](https://youtu.be/CUU49jjHloM?t=3419) +- [1:02:02 Области применения Node.js: Сервера](https://youtu.be/CUU49jjHloM?t=3722) +- [1:05:49 Области применения Node.js: Клиенты](https://youtu.be/CUU49jjHloM?t=3949) +- [1:08:58 Области применения Node.js: Hardware](https://youtu.be/CUU49jjHloM?t=4138) +- [1:09:28 Редкие области применения Node.js](https://youtu.be/CUU49jjHloM?t=4168) +- [1:11:55 Не подходящие области применения Node.js](https://youtu.be/CUU49jjHloM?t=4315) +- [1:13:53 Deno как экспементальная альтернатива Node.js](https://youtu.be/CUU49jjHloM?t=4433) +- [1:21:02 Обзор ссылок по теме](https://youtu.be/CUU49jjHloM?t=4862) +- [1:23:06 Ответы на вопросы](https://youtu.be/CUU49jjHloM?t=4986) + +## [Асинхронное программирование в Node.js и JavaScript](https://youtu.be/hY6Z6qNYzmc) + +- [5:45 Callbacks](https://youtu.be/hY6Z6qNYzmc?t=345) +- [10:00 Async.js or analogues](https://youtu.be/hY6Z6qNYzmc?t=600) +- [15:47 Events](https://youtu.be/hY6Z6qNYzmc?t=947) +- [18:00 Promise](https://youtu.be/hY6Z6qNYzmc?t=1080) +- [25:20 async/await](https://youtu.be/hY6Z6qNYzmc?t=1520) +- [27:10 Functor + Chaining + composition](https://youtu.be/hY6Z6qNYzmc?t=1630) +- [30:49 Problems of callback, async.js, Proimise, async/await](https://youtu.be/hY6Z6qNYzmc?t=1849) +- [34:00 Add timeout to any function](https://youtu.be/hY6Z6qNYzmc?t=2040) +- [36:55 Make function cancelable](https://youtu.be/hY6Z6qNYzmc?t=2215) +- [37:59 More wrappers](https://youtu.be/hY6Z6qNYzmc?t=2279) +- [39:22 Promisify and Callbackify](https://youtu.be/hY6Z6qNYzmc?t=2362) +- [48:47 Sync function to async](https://youtu.be/hY6Z6qNYzmc?t=2927) +- [41:43 Sync function to Promise](https://youtu.be/hY6Z6qNYzmc?t=2503) +- [43:17 Convertors](https://youtu.be/hY6Z6qNYzmc?t=2597) +- [43:31 Metasync](https://youtu.be/hY6Z6qNYzmc?t=2611) +- [45:26 Function composition](https://youtu.be/hY6Z6qNYzmc?t=2726) +- [47:09 Adynchronous function composition](https://youtu.be/hY6Z6qNYzmc?t=2829) +- [47:58 Flow communication like in electronics](https://youtu.be/hY6Z6qNYzmc?t=2878) +- [50:06 Collectors](https://youtu.be/hY6Z6qNYzmc?t=3006) +- [59:17 Queue](https://youtu.be/hY6Z6qNYzmc?t=3557) + +## [Обзор встроенного Node.js API](https://youtu.be/sOkjR-N6IAs) + +- [1:45 Readline](https://youtu.be/sOkjR-N6IAs?t=105) +- [2:42 Stream](https://youtu.be/sOkjR-N6IAs?t=162) +- [6:51 Buffer](https://youtu.be/sOkjR-N6IAs?t=411) +- [9:15 Child Processes](https://youtu.be/sOkjR-N6IAs?t=555) +- [12:24 Cluster](https://youtu.be/sOkjR-N6IAs?t=744) +- [16:23 Crypto](https://youtu.be/sOkjR-N6IAs?t=983) +- [17:47 DNS](https://youtu.be/sOkjR-N6IAs?t=1067) +- [19:30 Domain](https://youtu.be/sOkjR-N6IAs?t=1170) +- [22:44 Events](https://youtu.be/sOkjR-N6IAs?t=1364) +- [23:16 Errors, Timers](https://youtu.be/sOkjR-N6IAs?t=1396) +- [27:26 File System](https://youtu.be/sOkjR-N6IAs?t=1646) +- [28:56 HTTP](https://youtu.be/sOkjR-N6IAs?t=1736) +- [31:49 OS](https://youtu.be/sOkjR-N6IAs?t=1909) +- [33:38 Process](https://youtu.be/sOkjR-N6IAs?t=2018) +- [41:55 Path](https://youtu.be/sOkjR-N6IAs?t=2515) +- [43:15 TLS/SSL](https://youtu.be/sOkjR-N6IAs?t=2595) +- [44:44 URL](https://youtu.be/sOkjR-N6IAs?t=2684) +- [45:22 Util](https://youtu.be/sOkjR-N6IAs?t=2722) +- [47:00 V8/VM](https://youtu.be/sOkjR-N6IAs?t=2820) +- [49:55 Worker Threads](https://youtu.be/sOkjR-N6IAs?t=2995) +- [50:56 ZLIB](https://youtu.be/sOkjR-N6IAs?t=3056) +- [51:55 Modules](https://youtu.be/sOkjR-N6IAs?t=3115) + +## [Настройка среды: Node.js, npm, git, eslint](https://youtu.be/hSyA7tcNaCE) + +## [Работа с файлами, буферами и файловыми потоками в Node.js](https://youtu.be/eQGBS15vUac) + +- [1:39 Работа с файлами](https://youtu.be/eQGBS15vUac?t=99) +- [35:12 Буферы](https://youtu.be/eQGBS15vUac?t=2112) +- [43:46 Файловые потоки](https://youtu.be/eQGBS15vUac?t=2626) + +## [Наблюдение за файловой системой в Node.js](https://youtu.be/29QINR9rruQ) + +- [0:32 File watch](https://youtu.be/29QINR9rruQ?t=32) +- [4:40 Folder watch](https://youtu.be/29QINR9rruQ?t=280) +- [8:40 Server](https://youtu.be/29QINR9rruQ?t=520) +- [12:55 LiveReload](https://youtu.be/29QINR9rruQ?t=775) +- [24:50 LiverReload в impress](https://youtu.be/29QINR9rruQ?t=1490) + +## [Консоль и командная строка в JavaScript и Node.js](https://youtu.be/5aSZyKi5BmE) + +- [1:20 console](https://youtu.be/5aSZyKi5BmE?t=80) +- [16:00 readline](https://youtu.be/5aSZyKi5BmE?t=960) +- [21:35 cli](https://youtu.be/5aSZyKi5BmE?t=1295) +- [31:15 делаем красивый login screen](https://youtu.be/5aSZyKi5BmE?t=1875) + +## [Архитектурный подход к программированию](https://youtu.be/d_vyO2CkiOc) + +- [00:00:00 Когда нужна архитектура](https://youtu.be/d_vyO2CkiOc?t=0) +- [00:06:07 Принятие решений](https://youtu.be/d_vyO2CkiOc?t=367) +- [00:09:58 Типы связывания](https://youtu.be/d_vyO2CkiOc?t=598) +- [00:20:00 Ошибки](https://youtu.be/d_vyO2CkiOc?t=1200) +- [00:27:15 Принятие решений](https://youtu.be/d_vyO2CkiOc?t=1635) +- [00:37:05 Эволюция архитектурных решений](https://youtu.be/d_vyO2CkiOc?t=2225) +- [00:58:13 Схема современной архитектуры](https://youtu.be/d_vyO2CkiOc?t=3493) +- [01:01:40 субд в браузере](https://youtu.be/d_vyO2CkiOc?t=3700) +- [01:05:20 Альтернативные варианты](https://youtu.be/d_vyO2CkiOc?t=3920) +- [01:12:20 Как на самом деле](https://youtu.be/d_vyO2CkiOc?t=4340) +- [01:13:45 Архитектура мечты](https://youtu.be/d_vyO2CkiOc?t=4425) +- [01:16:45 Современные возможности и требования ](https://youtu.be/d_vyO2CkiOc?t=4605) +- [01:25:20 Топологии](https://youtu.be/d_vyO2CkiOc?t=5120) +- [01:30:45 Итог](https://youtu.be/d_vyO2CkiOc?t=5445) + +## [Модули, слои, структура проекта, песочницы в JavaScript и Node.js](https://youtu.be/O7A9chb573E) + +- [1:00 Пример структуры приложения](https://youtu.be/O7A9chb573E?t=60) +- [14:23 Примеры плохо и хорошо структурированного кода ](https://youtu.be/O7A9chb573E?t=863) +- [25:46 Песочницы](https://youtu.be/O7A9chb573E?t=1546) + +## [Инверсия управления и внедрение зависимостей в Node.js](https://youtu.be/Fz86Fdjz-LM) + +## [Межпроцессовое взаимодействие в Node.js](https://youtu.be/2OXWZFMvfbc) + +## [Слои, связанность и связность кода в JavaScript](https://youtu.be/A3RpwNlVeyY) + +## [Клиент-сервер на Node.js TCP и UDP, DNS](https://youtu.be/bHn-wTlTTR0) + +- [2:25 TCP, простой пример клиент/сервер](https://youtu.be/bHn-wTlTTR0?t=145) +- [20:20 TCP, пример сложнее](https://youtu.be/bHn-wTlTTR0?t=1220) +- [29:26 UDP](https://youtu.be/bHn-wTlTTR0?t=1766) +- [35:14 DNS](https://youtu.be/bHn-wTlTTR0?t=2114) + +## [HTTP сервер на Node.js (routing, cluster, IP sticky)](https://youtu.be/7Ufxj0oTaUo) + +## [HTTP сессии и cookies на чистом Node.js](https://youtu.be/T_wKXuWW4Wo) + +## [HTTP запросы в браузере и Node.js: XMLHttpRequest, fetch](https://youtu.be/wMMki2FEYGY) + +## [Разработка API на Node.js (клиент и сервер)](https://youtu.be/-az912XBCu8) + +## [WebSocket сервер на Node.js (электронные таблицы и чат)](https://youtu.be/Sf7ln3n16ws) + +## [Скаффолдинг для API, UI и данных](https://youtu.be/lipkLQVqDd8) + +## [Высоконагруженные распределенные приложения на Node.js](https://youtu.be/7tfZDABPvVs) + +## [Отдача статики в Node.js](https://youtu.be/n_AdKIzbpBc) + +## [Слой доступа к данным, курсор, транзакция](https://youtu.be/CRcSWtWVvrA) + +## [Работа с базами данных в Node.js на примере PostgreSQL](https://youtu.be/2tDvHQCBt3w) + +## [Паттерн Команда (Command) действие и параметры как объект](https://youtu.be/vER0vYL4hM4) + +## [CQS, CQRS, Event Sourcing - Разделение запросов и модификации данных](https://youtu.be/T2tRc80Q8Qw) + +## [Применение Event Sourcing (command, read, write, bus)](https://youtu.be/kFNtKiK2SPs) + +## [Модель акторов для параллельных вычислений](https://youtu.be/xp5MVKEqxY4) + +## [Утечки памяти в Node.js и JavaScript, сборка мусора и профилирование](https://youtu.be/0oZa64SB2wM) + +## [Atomics, SharedArrayBuffer, worker_threads в Node.js](https://youtu.be/zLm8pnbxSII) + +- [00:00 - початок ](https://youtu.be/zLm8pnbxSII?t=0) +- [03:53 - про worker_threads](https://youtu.be/zLm8pnbxSII?t=233) +- [12:20 - сепарація на worker i master](https://youtu.be/zLm8pnbxSII?t=740) +- [14:57 - як використовувати worker ](https://youtu.be/zLm8pnbxSII?t=897) +- [25:00 - про Atomics](https://youtu.be/zLm8pnbxSII?t=1500) +- [41:00 - Atomics i worker_threads робота в парі](https://youtu.be/zLm8pnbxSII?t=2460) + +## [Семафоры и мьютексы в JavaScript и Node.js](https://youtu.be/JNLrITevhRI) + +- [00:00 - теорія](https://youtu.be/JNLrITevhRI?t=0) +- [8:55 - приклад worker_threads без семафора ](https://youtu.be/JNLrITevhRI?t=535) +- [15:29 - про семафор, семафор бінарний, семафор з лічильником і Atomics ](https://youtu.be/JNLrITevhRI?t=929) +- [53:52 - мютекси та різниця між семафором ](https://youtu.be/JNLrITevhRI?t=3232) +- [58:28 - про deadlock](https://youtu.be/JNLrITevhRI?t=3508) +- [1:02:12 - про livelock і стан гонки](https://youtu.be/JNLrITevhRI?t=3732) + +## [Разделяемая память в многопоточном Node.js. Тимур Шемсединов. JS Fest 2019 Spring](https://youtu.be/KNsm_iIQt7U) + +## [Необработанные ошибки в промисах на Node.js](https://youtu.be/1Ml5NE2fsZ8) + +## [Проблема асинхронного стектрейса в JavaScript и Node.js](https://youtu.be/pfiHTx3j87Y) + +## [Логирование на Node.js и JavaScript](https://youtu.be/4DkZj2Cdokc) + +## [Graceful Shutdown в Node.js](https://youtu.be/ZstnowFeCe0) + +## [Безопасность приложений Node.js Security](https://youtu.be/Pdfo1G-gI6s) + +## [Serverless Clouds (FaaS) и изоляция контекстов запросов в Node.js](https://youtu.be/x-Rd6fPV6L8) + +## [Node.js в 2021: обзор платформы и вызовы на следующее десятилетие](https://youtu.be/nnB7ADYso8s) + +## [Семинар: Node.js в 2021, ответы на вопросы и обсуждение](https://youtu.be/zYRDhxj0zhQ) + +## [GRASP принципы с адаптацией для JavaScript и Node.js](https://youtu.be/ExauFjYV_lQ) + +- [5:03 Information Expert](https://youtu.be/ExauFjYV_lQ?t=303) +- [13:06 Creator](https://youtu.be/ExauFjYV_lQ?t=786) +- [18:15 Cohesion & Coupling](https://youtu.be/ExauFjYV_lQ?t=1095) +- [21:33 Controller](https://youtu.be/ExauFjYV_lQ?t=1293) +- [24:58 Polymorphism](https://youtu.be/ExauFjYV_lQ?t=1498) +- [31:55 Indirection](https://youtu.be/ExauFjYV_lQ?t=1915) +- [34:34 Pure Fabrication](https://youtu.be/ExauFjYV_lQ?t=2074) +- [38:36 Protected Variations](https://youtu.be/ExauFjYV_lQ?t=2316) + +## [GRASP: принцип информационный эксперт с адаптацией для JavaScript и Node.js](https://youtu.be/cCHL329_As0) + +## [GRASP: Зацепление и связность в JavaScript и Node.js - coupling and cohesion](https://youtu.be/IGXdPOZ3Fyk) + +## [GRASP: Чистая выдумка для JavaScript и Node.js - Pure Fabrication](https://youtu.be/CV577a0RHBM) + +## [GRASP: Декомпозиция класса Application из библиотеки impress технологического стека Metarhia](https://youtu.be/4AMVQ2-2DcM) + +## [Node.js - плохие подходы и хорошие стороны - Postindustria Podcast](https://youtu.be/oEyS_TNiw2g) + +## [Node.js модули: ECMA, Common.js, Module API](https://youtu.be/CJr2vS3hjMU) + +- [1:02 export модулей](https://youtu.be/CJr2vS3hjMU?t=62) +- [3:00 require модулей](https://youtu.be/CJr2vS3hjMU?t=180) +- [5:35 require-resolve модулей](https://youtu.be/CJr2vS3hjMU?t=335) +- [12:15 cache](https://youtu.be/CJr2vS3hjMU?t=735) +- [18:38 немного об singleton](https://youtu.be/CJr2vS3hjMU?t=1118) +- [19:53 модуль global](https://youtu.be/CJr2vS3hjMU?t=1193) +- [20:43 пример с mixin-ами](https://youtu.be/CJr2vS3hjMU?t=1243) +- [25:13 пример ecma скрипт модуля - export](https://youtu.be/CJr2vS3hjMU?t=1513) +- [26:10 пример ecma скрипт модуля - import](https://youtu.be/CJr2vS3hjMU?t=1570) +- [27:20 пример динамического импорта](https://youtu.be/CJr2vS3hjMU?t=1640) +- [31:10 загрузка ф-ии createRequire](https://youtu.be/CJr2vS3hjMU?t=1870) +- [41:00 подгрузка module через require](https://youtu.be/CJr2vS3hjMU?t=2460) +- [43:40 подгрузка module через import](https://youtu.be/CJr2vS3hjMU?t=2620) + +## [Node.js модули и пакеты формата ECMA и CommonJS, использование package.json и node_modules](https://youtu.be/31sX_3IbXs4) + +- [1:00 подгрузка пакетов package](https://youtu.be/31sX_3IbXs4?t=60) +- [5:40 загрузка пакетов](https://youtu.be/31sX_3IbXs4?t=340) +- [9:00 подгрузка файлов нового формата .mjs](https://youtu.be/31sX_3IbXs4?t=540) +- [10:47 импорт ecma скрипт модулей с .js файлов](https://youtu.be/31sX_3IbXs4?t=647) +- [13:20 export пакетов](https://youtu.be/31sX_3IbXs4?t=800) +- [22:30 сравнение cache-й модулей](https://youtu.be/31sX_3IbXs4?t=1350) + +## [Асинхронный пул для worker thread pool в Node.js](https://youtu.be/Jj5KZRq4wYI) + +## [Контрактное программирование с примерами на JavaScript и Node.js](https://youtu.be/K5_kSUvbGEQ) + +## [Hacktoberfest 2021: лайвкодинг и ревью кода, Node.js worker_threads и thread pool для Metarhia](https://youtu.be/qipIRQptP_4) + From 9236926ede5dfe50d163907828f10492c09b705a Mon Sep 17 00:00:00 2001 From: Anton Telichenko Date: Wed, 3 Aug 2022 13:14:22 +0300 Subject: [PATCH 002/217] Update Functional.md (#74) Co-authored-by: Timur Shemsedinov --- Courses/Functional.md | 165 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) diff --git a/Courses/Functional.md b/Courses/Functional.md index 57cfee5..21e382e 100644 --- a/Courses/Functional.md +++ b/Courses/Functional.md @@ -29,3 +29,168 @@ - [Асинхронная композиция функций](https://youtu.be/3ZCrMlMpOrM) - Примеры кода: https://github.com/HowProgrammingWorks/AsyncCompose - [Принцип подстановки Барбары Лисков](https://youtu.be/RbhYxygxroc) + +# Functional programming (таймкоды) + +## [Функции, лямбды (стрелочные функции), контексты, замыкания в JavaScript](https://youtu.be/pn5myCmpV2U) + +- [00:00:00 Введение ](https://youtu.be/pn5myCmpV2U?t=0) +- [00:11:22 Функция объявление (Declaration)](https://youtu.be/pn5myCmpV2U?t=682) +- [00:12:46 Функция выражение (Expression)](https://youtu.be/pn5myCmpV2U?t=766) +- [00:16:07 Лямбда-выражение (Lambda expression) или функция-стрелка (Arrow function) ](https://youtu.be/pn5myCmpV2U?t=967) +- [00:16:43 Лямбда-функция (Lambda function) ](https://youtu.be/pn5myCmpV2U?t=1003) +- [00:18:45 Область видимости (Scope)](https://youtu.be/pn5myCmpV2U?t=1125) +- [00:25:00 Функции, как абстракции](https://youtu.be/pn5myCmpV2U?t=1500) +- [00:26:43 Методы функции (name, length, toString( ) )](https://youtu.be/pn5myCmpV2U?t=1603) +- [00:31:26 Значения по умолчанию у функции ](https://youtu.be/pn5myCmpV2U?t=1886) +- [00:36:46 Rest-оператор (...args)](https://youtu.be/pn5myCmpV2U?t=2206) +- [00:41:49 Способ определения функции, через new Function](https://youtu.be/pn5myCmpV2U?t=2509) +- [00:44:46 Функции внутри объекта](https://youtu.be/pn5myCmpV2U?t=2686) +- [00:50:42 Обращение к полям объекта из привязанной функции, через this](https://youtu.be/pn5myCmpV2U?t=3042) +- [00:55:24 История синтаксиса создания контекстов, через самовызывающиеся функции ( IIFE)](https://youtu.be/pn5myCmpV2U?t=3324) +- [00:58:30 Методы функции, наследуемой от объекта (call, apply)](https://youtu.be/pn5myCmpV2U?t=3510) +- [01:00:53 Комментирование функций](https://youtu.be/pn5myCmpV2U?t=3653) +- [01:01:27 Задание декомпозиции функции](https://youtu.be/pn5myCmpV2U?t=3687) +- [01:04:24 Замыкание: context ](https://youtu.be/pn5myCmpV2U?t=3864) +- [01:08:41 Замыкание: chainning ](https://youtu.be/pn5myCmpV2U?t=4121) +- [01:11:55 Замыкание: summator ](https://youtu.be/pn5myCmpV2U?t=4315) +- [01:14:16 Замыкание: recursion](https://youtu.be/pn5myCmpV2U?t=4456) + +## [Частичное применение и каррирование в JavaScript ( Partial application )](https://youtu.be/ND8KQ5xjk7o) + +- [00:00:00 Замыкание ](https://youtu.be/ND8KQ5xjk7o?t=0) +- [00:04:54 Лямбда- функция ](https://youtu.be/ND8KQ5xjk7o?t=294) +- [00:06:06 Метод bind ](https://youtu.be/ND8KQ5xjk7o?t=366) +- [00:08:30 Абстрагированный пример функции ](https://youtu.be/ND8KQ5xjk7o?t=510) +- [00:13:42 Абстрагированный пример функции (расширение) ](https://youtu.be/ND8KQ5xjk7o?t=822) +- [00:15:47 Неправильная реализация каррирования ](https://youtu.be/ND8KQ5xjk7o?t=947) +- [00:22:22 Правильная реализация каррирования ](https://youtu.be/ND8KQ5xjk7o?t=1342) +- [00:28:54 Правильная реализация каррирования (расширение)](https://youtu.be/ND8KQ5xjk7o?t=1734) +- [00:31:41 Функциональные абстракции (superposition)](https://youtu.be/ND8KQ5xjk7o?t=1901) +- [00:38:02 Функциональные абстракции, с сохранением выражений (composition)](https://youtu.be/ND8KQ5xjk7o?t=2282) +- [00:45:05 Композиция с 2 функциями](https://youtu.be/ND8KQ5xjk7o?t=2705) +- [00:46:05 Композиция с n - функциями, при помощи метода reduce](https://youtu.be/ND8KQ5xjk7o?t=2765) +- [00:51:25 Композиция с n - функциями, при помощи цикла ](https://youtu.be/ND8KQ5xjk7o?t=3085) +- [00:54:29 Композиция с n - функциями, при помощи рекурсии](https://youtu.be/ND8KQ5xjk7o?t=3269) +- [00:57:40 Композиция асинхронных функций ](https://youtu.be/ND8KQ5xjk7o?t=3460) +- [01:01:27 Обобщение](https://youtu.be/ND8KQ5xjk7o?t=3687) + +## [Функции высшего порядка, колбеки, события на JavaScript (HigherOrderFunctions, callbacks, events)](https://youtu.be/1vqATwbGHnc) + +- [00:00:00 Определение ](https://youtu.be/1vqATwbGHnc?t=0) +- [00:02:03 Математическая функция ](https://youtu.be/1vqATwbGHnc?t=123) +- [00:05:57 Функция обратного вызова (callback) ](https://youtu.be/1vqATwbGHnc?t=357) +- [00:09:33 Замыкание ](https://youtu.be/1vqATwbGHnc?t=573) +- [00:10:51 Цепочка вызовов ](https://youtu.be/1vqATwbGHnc?t=651) +- [00:12:40 Сохранение кэша с помощью замыкания](https://youtu.be/1vqATwbGHnc?t=760) +- [00:18:29 Добавление функции поведение логирования](https://youtu.be/1vqATwbGHnc?t=1109) +- [00:21:45 Обобщение ](https://youtu.be/1vqATwbGHnc?t=1305) +- [00:22:45 Сallback](https://youtu.be/1vqATwbGHnc?t=1365) +- [00:25:32 Сallback асинхронной функции считывание файла](https://youtu.be/1vqATwbGHnc?t=1532) +- [00:28:36 Сallback именованный](https://youtu.be/1vqATwbGHnc?t=1716) +- [00:33:01 Сallback-timer ](https://youtu.be/1vqATwbGHnc?t=1981) +- [00:36:20 Сallback-timer-curry](https://youtu.be/1vqATwbGHnc?t=2180) +- [00:38:59 Listener](https://youtu.be/1vqATwbGHnc?t=2339) +- [00:41:10 Listener-timer](https://youtu.be/1vqATwbGHnc?t=2470) +- [00:46:59 Event](https://youtu.be/1vqATwbGHnc?t=2819) +- [00:53:45 Event-imitter ](https://youtu.be/1vqATwbGHnc?t=3225) +- [00:57:48 Deferred object (отложенный объект)](https://youtu.be/1vqATwbGHnc?t=3468) +- [01:01:31 Errors](https://youtu.be/1vqATwbGHnc?t=3691) + +## [Примеси, обертки, декораторы, мемоизация в JavaScript (Wrappers)](https://youtu.be/oRQ0kQr1N-U) + +- [00:00:00 Синхронная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=0) +- [00:02:55 Синхронная универсальная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=175) +- [00:08:28 Асинхронная универсальная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=508) +- [00:15:50 Синхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/oRQ0kQr1N-U?t=950) +- [00:22:45 Асинхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/oRQ0kQr1N-U?t=1365) +- [00:25:38 Функция-обертка, которая ограничивает вызов функции до одного вызова (once) ](https://youtu.be/oRQ0kQr1N-U?t=1538) +- [00:27:36 Функция-обертка, которая ограничивает вызов функции до n-го вызова (limit)](https://youtu.be/oRQ0kQr1N-U?t=1656) +- [00:29:50 Функция-обертка, которая отменяет вызов функции (cancel)](https://youtu.be/oRQ0kQr1N-U?t=1790) +- [00:32:29 Функция-обертка с методами timeout, limit, cancel](https://youtu.be/oRQ0kQr1N-U?t=1949) +- [00:39:03 Функция-обертка с методами timeout, limit, cancel (оптимизированная)](https://youtu.be/oRQ0kQr1N-U?t=2343) +- [00:42:28 Функция-обертка, которая ограничивает один вызов за 200 мс (throttle)](https://youtu.be/oRQ0kQr1N-U?t=2548) +- [00:45:47 Примесь поля через точку ](https://youtu.be/oRQ0kQr1N-U?t=2747) +- [00:51:35 Примесь поля через функцию extend](https://youtu.be/oRQ0kQr1N-U?t=3095) +- [00:57:35 Примесь поля через object.assign( )](https://youtu.be/oRQ0kQr1N-U?t=3455) +- [00:59:18 Примесь поведения ](https://youtu.be/oRQ0kQr1N-U?t=3558) +- [01:02:23 Примесь изменения класса](https://youtu.be/oRQ0kQr1N-U?t=3743) +- [01:06:50 Определение](https://youtu.be/oRQ0kQr1N-U?t=4010) +- [01:07:30 Реализация простой мемоизации ](https://youtu.be/oRQ0kQr1N-U?t=4050) +- [01:14:43 Реализация простой мемоизации с проверкой скорости ](https://youtu.be/oRQ0kQr1N-U?t=4483) +- [01:20:43 Удаление накопленного кэша ](https://youtu.be/oRQ0kQr1N-U?t=4843) +- [01:25:35 Асинхронная мемоизация ](https://youtu.be/oRQ0kQr1N-U?t=5135) +- [01:31:10 Преобразование аргументов и ключей в hash-функцию](https://youtu.be/oRQ0kQr1N-U?t=5470) +- [01:33:32 Реализация сложной мемоизации](https://youtu.be/oRQ0kQr1N-U?t=5612) + +## [Чеининг функций и объектов, обработка ошибок в JavaScript](https://youtu.be/PfuEfIiLX34) + +- [00:00:00 Введение ](https://youtu.be/PfuEfIiLX34?t=0) +- [00:01:10 Чеининг через синтаксис вызова функций ](https://youtu.be/PfuEfIiLX34?t=70) +- [00:02:12 Prototype ](https://youtu.be/PfuEfIiLX34?t=132) +- [00:05:45 Сlass](https://youtu.be/PfuEfIiLX34?t=345) +- [00:06:11 Functor](https://youtu.be/PfuEfIiLX34?t=371) +- [00:11:54 Mutable](https://youtu.be/PfuEfIiLX34?t=714) +- [00:16:34 Iterator](https://youtu.be/PfuEfIiLX34?t=994) +- [00:26:18 Promise ](https://youtu.be/PfuEfIiLX34?t=1578) +- [00:26:35 Test](https://youtu.be/PfuEfIiLX34?t=1595) +- [00:37:08 Compare ](https://youtu.be/PfuEfIiLX34?t=2228) +- [00:39:45 Benchmark](https://youtu.be/PfuEfIiLX34?t=2385) +- [00:40:48 Запуск и анализ тестов ](https://youtu.be/PfuEfIiLX34?t=2448) +- [01:03:48 Первый способ возвращение ошибок в синхронном коде ](https://youtu.be/PfuEfIiLX34?t=3828) +- [01:09:24 Второй способ возвращение ошибок в синхронном коде ](https://youtu.be/PfuEfIiLX34?t=4164) +- [01:12:26 Возвращение ошибок в асинхронном коде ](https://youtu.be/PfuEfIiLX34?t=4346) +- [01:16:14 Корректное возвращение ошибок ](https://youtu.be/PfuEfIiLX34?t=4574) +- [01:20:03 Обработка ошибок c promise ](https://youtu.be/PfuEfIiLX34?t=4803) +- [01:23:58 Обработка ошибок c async-await](https://youtu.be/PfuEfIiLX34?t=5038) + +## [Функциональное программирование на JavaScript](https://youtu.be/0JxSs_GcvbQ) + +## [Функциональные объекты, функторы и монады в JavaScript](https://youtu.be/3Z7f0Gi8pxw) + +- [00:00:00 Определение функтора ](https://youtu.be/3Z7f0Gi8pxw?t=0) +- [00:01:40 Функтор из прототипа ](https://youtu.be/3Z7f0Gi8pxw?t=100) +- [00:08:17 Функтор из прототипа (упрощенный) ](https://youtu.be/3Z7f0Gi8pxw?t=497) +- [00:09:14 Функтор из замыкания ](https://youtu.be/3Z7f0Gi8pxw?t=554) +- [00:11:49 Функтор из замыкания с тернарным оператором](https://youtu.be/3Z7f0Gi8pxw?t=709) +- [00:12:44 Аппликативный функтор из прототипа ](https://youtu.be/3Z7f0Gi8pxw?t=764) +- [00:18:08 Аппликативный функтор из замыкания (монада)](https://youtu.be/3Z7f0Gi8pxw?t=1088) +- [00:23:11 Пример применения монады ](https://youtu.be/3Z7f0Gi8pxw?t=1391) +- [00:28:37 Функциональный объект ](https://youtu.be/3Z7f0Gi8pxw?t=1717) +- [00:39:44 Пример применения функционального объекта](https://youtu.be/3Z7f0Gi8pxw?t=2384) +- [00:45:27 Обобщение](https://youtu.be/3Z7f0Gi8pxw?t=2727) + +## [Отмена асинхронных операций, cancellable callback and Promise в JavaScript](https://youtu.be/T8fXlnqI4Ws) + +## [Future: Асинхронность на фьючерах без состояния](https://youtu.be/22ONv3AGXdk) + +## [Примеси, обертки, декораторы, мемоизация](https://youtu.be/2h9syXN5wO0) + +- [00:00:00 Синхронная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=0) +- [00:02:55 Синхронная универсальная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=175) +- [00:08:28 Асинхронная универсальная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=508) +- [00:15:50 Синхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/2h9syXN5wO0?t=950) +- [00:22:45 Асинхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/2h9syXN5wO0?t=1365) +- [00:25:38 Функция-обертка, которая ограничивает вызов функции до одного вызова (once) ](https://youtu.be/2h9syXN5wO0?t=1538) +- [00:27:36 Функция-обертка, которая ограничивает вызов функции до n-го вызова (limit)](https://youtu.be/2h9syXN5wO0?t=1656) +- [00:29:50 Функция-обертка, которая отменяет вызов функции (cancel)](https://youtu.be/2h9syXN5wO0?t=1790) +- [00:32:29 Функция-обертка с методами timeout, limit, cancel](https://youtu.be/2h9syXN5wO0?t=1949) +- [00:39:03 Функция-обертка с методами timeout, limit, cancel (оптимизированная)](https://youtu.be/2h9syXN5wO0?t=2343) +- [00:42:28 Функция-обертка, которая ограничивает один вызов за 200 мс (throttle)](https://youtu.be/2h9syXN5wO0?t=2548) +- [00:45:47 Примесь поля через точку ](https://youtu.be/2h9syXN5wO0?t=2747) +- [00:51:35 Примесь поля через функцию extend](https://youtu.be/2h9syXN5wO0?t=3095) +- [00:57:35 Примесь поля через object.assign( )](https://youtu.be/2h9syXN5wO0?t=3455) +- [00:59:18 Примесь поведения ](https://youtu.be/2h9syXN5wO0?t=3558) +- [01:02:23 Примесь изменения класса](https://youtu.be/2h9syXN5wO0?t=3743) +- [01:06:50 Определение](https://youtu.be/2h9syXN5wO0?t=4010) +- [01:07:30 Реализация простой мемоизации ](https://youtu.be/2h9syXN5wO0?t=4050) +- [01:14:43 Реализация простой мемоизации с проверкой скорости ](https://youtu.be/2h9syXN5wO0?t=4483) +- [01:20:43 Удаление накопленного кэша ](https://youtu.be/2h9syXN5wO0?t=4843) +- [01:25:35 Асинхронная мемоизация ](https://youtu.be/2h9syXN5wO0?t=5135) +- [01:31:10 Преобразование аргументов и ключей в hash-функцию](https://youtu.be/2h9syXN5wO0?t=5470) +- [01:33:32 Реализация сложной мемоизации](https://youtu.be/2h9syXN5wO0?t=5612) + +## [Мемоизация функций: memoize в JavaScript](https://youtu.be/H6S8QJo2Qxg) + +## [Композиция функций (pipe, compose) в JavaScript](https://youtu.be/xS9FicVrOTI) + From 18234234ea5528fe569450227ec649fb9cb45cee Mon Sep 17 00:00:00 2001 From: Anton Telichenko Date: Wed, 3 Aug 2022 21:40:55 +0300 Subject: [PATCH 003/217] Update Fundamentals.md (#73) Co-authored-by: Timur Shemsedinov --- Courses/Fundamentals.md | 975 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 975 insertions(+) diff --git a/Courses/Fundamentals.md b/Courses/Fundamentals.md index f6d9174..4bc6171 100644 --- a/Courses/Fundamentals.md +++ b/Courses/Fundamentals.md @@ -179,3 +179,978 @@ - Интроспекция: https://github.com/HowProgrammingWorks/Introspection - Рефлекция: https://github.com/HowProgrammingWorks/Reflect - [Почему хорошее ИТ-образование невостребовано рыночком](https://youtu.be/nvIJE6xMpiI) + +# Основы программирования (таймкоды) + +## [Карта специальности инженер-программист](https://youtu.be/SE5aXH-yf0I) + +- [00:00:00 Введение](https://youtu.be/SE5aXH-yf0I?t=0) +- [00:02:21 Что такое программирование? ](https://youtu.be/SE5aXH-yf0I?t=141) +- [00:05:55 Связанные понятия ](https://youtu.be/SE5aXH-yf0I?t=355) +- [00:06:43 Основы программной инженерии ](https://youtu.be/SE5aXH-yf0I?t=403) +- [00:11:42 Предсказуемые вычисления ](https://youtu.be/SE5aXH-yf0I?t=702) +- [00:14:36 Моделирование](https://youtu.be/SE5aXH-yf0I?t=876) +- [00:14:52 Классификация моделей ](https://youtu.be/SE5aXH-yf0I?t=892) +- [00:17:33 Схемы моделирования ](https://youtu.be/SE5aXH-yf0I?t=1053) +- [00:22:23 Парадигмы программирования ](https://youtu.be/SE5aXH-yf0I?t=1343) +- [00:23:16 Императивное и функциональное программирование ](https://youtu.be/SE5aXH-yf0I?t=1396) +- [00:28:25 Неструктурное программирование ](https://youtu.be/SE5aXH-yf0I?t=1705) +- [00:30:01 Структурное программирование ](https://youtu.be/SE5aXH-yf0I?t=1801) +- [00:30:46 Процедурное программирование ](https://youtu.be/SE5aXH-yf0I?t=1846) +- [00:31:18 Объектно-ориетированное программирование ](https://youtu.be/SE5aXH-yf0I?t=1878) +- [00:31:48 Прототипно-ориетированное программирование ](https://youtu.be/SE5aXH-yf0I?t=1908) +- [00:32:14 Функциональное программирование ](https://youtu.be/SE5aXH-yf0I?t=1934) +- [00:32:48 Узконаправленное программирование](https://youtu.be/SE5aXH-yf0I?t=1968) +- [00:33:44 Техники и технологии](https://youtu.be/SE5aXH-yf0I?t=2024) +- [00:36:55 Реактивное программирование и Событийно-ориентированное](https://youtu.be/SE5aXH-yf0I?t=2215) +- [00:38:16 Функционально-реактивное программирование ](https://youtu.be/SE5aXH-yf0I?t=2296) +- [00:38:39 Модель акторов](https://youtu.be/SE5aXH-yf0I?t=2319) +- [00:39:49 Метапрограммирование ](https://youtu.be/SE5aXH-yf0I?t=2389) +- [00:43:09 Системное и прикладное программирование](https://youtu.be/SE5aXH-yf0I?t=2589) +- [00:44:25 Задачи программной инженерии ](https://youtu.be/SE5aXH-yf0I?t=2665) +- [00:50:46 Как преодолеть сложность ](https://youtu.be/SE5aXH-yf0I?t=3046) +- [00:52:16 Данные и логика ](https://youtu.be/SE5aXH-yf0I?t=3136) +- [00:57:49 Разработка программного обеспечения ](https://youtu.be/SE5aXH-yf0I?t=3469) +- [01:04:50 Подход к разработке ](https://youtu.be/SE5aXH-yf0I?t=3890) +- [01:06:04 Гибридная разработка ](https://youtu.be/SE5aXH-yf0I?t=3964) +- [01:07:10 Принцип NIH ](https://youtu.be/SE5aXH-yf0I?t=4030) +- [01:09:12 Классификация приложений по месту запуска](https://youtu.be/SE5aXH-yf0I?t=4152) +- [01:12:17 Схемы и примеры](https://youtu.be/SE5aXH-yf0I?t=4337) +## [Введение в программирование (1 часть)](https://youtu.be/5Gt61EX6HZ4) + +- [0:00:02 лекция о базовых понятиях для начинающих](https://youtu.be/5Gt61EX6HZ4?t=2) +- [0:01:43 что-то уже знаете / слышали](https://youtu.be/5Gt61EX6HZ4?t=103) +- [0:04:50 терминология важна](https://youtu.be/5Gt61EX6HZ4?t=290) +- [0:05:45 инструкция или оператор / Statement](https://youtu.be/5Gt61EX6HZ4?t=345) +- [0:07:23 синтаксис / Syntax](https://youtu.be/5Gt61EX6HZ4?t=443) +- [0:09:21 почти все группы операторов / Statements](https://youtu.be/5Gt61EX6HZ4?t=561) +- [0:13:27 операция 0:14:09 команда 0:15:03 директива](https://youtu.be/5Gt61EX6HZ4?t=807) +- [0:16:59 выражение / Expression](https://youtu.be/5Gt61EX6HZ4?t=1019) +- [0:20:53 значение / Value](https://youtu.be/5Gt61EX6HZ4?t=1253) +- [0:22:28 тип / Type](https://youtu.be/5Gt61EX6HZ4?t=1348) +- [0:27:22 литерал / Literal](https://youtu.be/5Gt61EX6HZ4?t=1642) +- [0:28:46 скаляр / Scalar, Primitive, Atomic value](https://youtu.be/5Gt61EX6HZ4?t=1726) +- [0:31:02 ссылка / Reference](https://youtu.be/5Gt61EX6HZ4?t=1862) +- [0:34:05 идентификатор / Identifier](https://youtu.be/5Gt61EX6HZ4?t=2045) +- [0:37:31 переменная / Variable](https://youtu.be/5Gt61EX6HZ4?t=2251) +- [0:40:08 присвоение / Assignment](https://youtu.be/5Gt61EX6HZ4?t=2408) +- [0:41:29 константа / Constant](https://youtu.be/5Gt61EX6HZ4?t=2489) +- [0:43:16 структурные типы / Composed types](https://youtu.be/5Gt61EX6HZ4?t=2596) +- [0:44:03 флаг / Flag](https://www.youtube.com/watch?v=5Gt61EX6HZ4&t=2643s) +- [0:45:09 перечисляемый тип](https://youtu.be/5Gt61EX6HZ4?t=2643) +- [0:46:02 алгоритм / Algorithm](https://youtu.be/5Gt61EX6HZ4?t=2762) +- [0:47:40 программа / Program](https://youtu.be/5Gt61EX6HZ4?t=2860) +- [0:49:01 инженерия / Engineering](https://youtu.be/5Gt61EX6HZ4?t=2941) +- [0:50:42 инженерия программного обеспечения / Software engineering](https://youtu.be/5Gt61EX6HZ4?t=3042) +- [0:52:03 программирование / Programming](https://youtu.be/5Gt61EX6HZ4?t=3123) +- [0:53:31 кодирование / Coding](https://youtu.be/5Gt61EX6HZ4?t=3211) +- [0:54:15 разработка программного обеспечения / Software development](https://youtu.be/5Gt61EX6HZ4?t=3255) +- [0:58:49 процедура, функция, подпрограмма, метод: различия](https://youtu.be/5Gt61EX6HZ4?t=3529) +- [0:59:15 блок кода / Block of code](https://youtu.be/5Gt61EX6HZ4?t=3555) +- [1:01:58 процедура или подпрограмма / Procedure or Subroutine](https://youtu.be/5Gt61EX6HZ4?t=3718) +- [1:05:18 функция / Function](https://youtu.be/5Gt61EX6HZ4?t=3918) +- [1:08:06 сигнатура функции / Function signature](https://youtu.be/5Gt61EX6HZ4?t=4086) +- [1:09:16 метод / Method](https://youtu.be/5Gt61EX6HZ4?t=4156) +- [1:10:37 цикл / Loop](https://www.youtube.com/watch?v=5Gt61EX6HZ4&t=4237s) +- [1:10:52 итерирование](https://www.youtube.com/watch?v=5Gt61EX6HZ4&t=4252s) +- [1:11:40 функциональное программирование](https://youtu.be/5Gt61EX6HZ4?t=4237) +- [1:13:05 условие / Conditional statements / ветвление](https://youtu.be/5Gt61EX6HZ4?t=4385) +- [1:14:54 парадигма программирования / Programming paradigm](https://youtu.be/5Gt61EX6HZ4?t=4494) +## [Семинар: Обсуждение плана и материалов курса «Основы программирования»](https://youtu.be/bQMTbRWrteU) + +- [0:15 - вопрос по операционным системам](https://youtu.be/bQMTbRWrteU?t=15) +- [3:35 - какой язык посоветуете из функционального программирования](https://youtu.be/bQMTbRWrteU?t=215) +- [4:40 - время нужное для прохождения курса](https://youtu.be/bQMTbRWrteU?t=280) +- [7:25 - учебники по JS и туториал](https://youtu.be/bQMTbRWrteU?t=445) +- [11:00 - экзамены, сертификат для студентов из других стран](https://youtu.be/bQMTbRWrteU?t=660) +- [12:45 - как будет проходить экзамен](https://youtu.be/bQMTbRWrteU?t=765) +- [14:55 - сколько времени нужно уделять в неделю или в день](https://youtu.be/bQMTbRWrteU?t=895) +- [17:35 - куда задавать вопросы](https://youtu.be/bQMTbRWrteU?t=1055) +- [18:56 - структура курса](https://youtu.be/bQMTbRWrteU?t=1136) +- [22:30 - контроль решения задач](https://youtu.be/bQMTbRWrteU?t=1350) +- [23:35 - сферы применения Node.js](https://youtu.be/bQMTbRWrteU?t=1415) +- [24:22 - возможно ли посещать курс лично](https://youtu.be/bQMTbRWrteU?t=1462) +- [26:23 - актуальность изучения С++ и Rust](https://youtu.be/bQMTbRWrteU?t=1583) +- [27:48 - стану ли я программистом пройдя курс](https://youtu.be/bQMTbRWrteU?t=1668) +- [28:10 - какой стандарт JS используется в курсе](https://youtu.be/bQMTbRWrteU?t=1690) +- [28:35 - откуда начинать курс](https://youtu.be/bQMTbRWrteU?t=1715) +- [29:20 - как посещать старшую группу](https://youtu.be/bQMTbRWrteU?t=1760) +- [31:45 - об основах вёрстки и популярных фреймворках](https://youtu.be/bQMTbRWrteU?t=1905) +- [33:03 - обязательно ли использовать фреймворки](https://youtu.be/bQMTbRWrteU?t=1983) +- [36:15 - почему столь немногим удается сдать экзамен](https://youtu.be/bQMTbRWrteU?t=2175) +- [36:50 - проверка задач для допуска к экзамену и их уровень сложности](https://youtu.be/bQMTbRWrteU?t=2210) +- [37:55 - теоретические вопросы на экзамене, пример](https://youtu.be/bQMTbRWrteU?t=2275) +- [39:35 - знание математики](https://youtu.be/bQMTbRWrteU?t=2375) +- [43:10 - сложные вопросы CS в курсе](https://youtu.be/bQMTbRWrteU?t=2590) +- [46:00 - как происходит проверка задач для допуска к экзамену](https://youtu.be/bQMTbRWrteU?t=2760) +## [Настройка среды: Node.js, npm, git, eslint](https://youtu.be/hSyA7tcNaCE) + +## [Базовый синтаксис JavaScript](https://youtu.be/xJn3k1f4BiM) + +- [00:00:00 Введение](https://youtu.be/xJn3k1f4BiM?t=0) +- [00:03:02 Идентификаторы (identifiers: const, let, arguments, object property)](https://youtu.be/xJn3k1f4BiM?t=182) +- [00:14:41 Циклы (loops)](https://youtu.be/xJn3k1f4BiM?t=881) +- [00:22:10 Функции (functions)](https://youtu.be/xJn3k1f4BiM?t=1330) +- [00:30:35 Объекты (objects) ](https://youtu.be/xJn3k1f4BiM?t=1835) +- [00:33:34 Итерирование по массиву ( for ( ... of ... { } )](https://youtu.be/xJn3k1f4BiM?t=2014) +- [00:39:01 Итерирование по объекту ( for ( ... in ... { } )](https://youtu.be/xJn3k1f4BiM?t=2341) +- [00:42:28 Синтаксис простого кода](https://youtu.be/xJn3k1f4BiM?t=2548) +- [00:55:21 Синтаксис функции](https://youtu.be/xJn3k1f4BiM?t=3321) +- [01:05:38 Синтаксис класса](https://youtu.be/xJn3k1f4BiM?t=3938) +- [01:09:10 Синтаксис расширения класса с помощью функции](https://youtu.be/xJn3k1f4BiM?t=4150) +- [01:14:59 Идентификаторы в виде символов unicode](https://youtu.be/xJn3k1f4BiM?t=4499) +- [01:17:15 Синтаксис комментариев](https://youtu.be/xJn3k1f4BiM?t=4635) +- [01:18:13 Способы объявления переменных ](https://youtu.be/xJn3k1f4BiM?t=4693) +- [01:18:24 Скалярные типы переменных (string, number, boolean)](https://youtu.be/xJn3k1f4BiM?t=4704) +- [01:19:12 Структурные/ссылочные типы переменных (function, array, object)](https://youtu.be/xJn3k1f4BiM?t=4752) +## [Базовый синтаксис JavaScript, продолжение](https://youtu.be/qa-XleqA0JU) + +- [00:01:34 Number (integer / float)](https://youtu.be/qa-XleqA0JU?t=94) +- [00:02:11 String ](https://youtu.be/qa-XleqA0JU?t=131) +- [00:02:15 Boolean](https://youtu.be/qa-XleqA0JU?t=135) +- [00:02:16 Object](https://youtu.be/qa-XleqA0JU?t=136) +- [00:03:08 Array](https://youtu.be/qa-XleqA0JU?t=188) +- [00:04:20 Метод array.push](https://youtu.be/qa-XleqA0JU?t=260) +- [00:04:31 Метод array.unshift](https://youtu.be/qa-XleqA0JU?t=271) +- [00:04:50 Метод array.shift](https://youtu.be/qa-XleqA0JU?t=290) +- [00:05:17 Метод array.pop](https://youtu.be/qa-XleqA0JU?t=317) +- [00:05:55 Оператор typeof](https://youtu.be/qa-XleqA0JU?t=355) +- [00:08:33 Метод Array.isArray](https://youtu.be/qa-XleqA0JU?t=513) +- [00:10:06 Оператор instanceof](https://youtu.be/qa-XleqA0JU?t=606) +- [00:10:48 Undefined](https://youtu.be/qa-XleqA0JU?t=648) +- [00:11:12 Null](https://youtu.be/qa-XleqA0JU?t=672) +- [00:11:55 NaN](https://youtu.be/qa-XleqA0JU?t=715) +- [00:14:18 Infinity](https://youtu.be/qa-XleqA0JU?t=858) +- [00:14:48 Тернарный оператор](https://youtu.be/qa-XleqA0JU?t=888) +- [00:16:15 Функция paseInt](https://youtu.be/qa-XleqA0JU?t=975) +- [00:24:23 Функция paseFloat](https://youtu.be/qa-XleqA0JU?t=1463) +- [00:27:15 Удаление переменных ](https://youtu.be/qa-XleqA0JU?t=1635) +- [00:33:25 Побитовые операторы (Bitwise operators)](https://youtu.be/qa-XleqA0JU?t=2005) +- [00:34:38 Побитовые операции](https://youtu.be/qa-XleqA0JU?t=2078) +- [00:44:30 BigInt](https://youtu.be/qa-XleqA0JU?t=2670) +- [00:56:30 Операторы сравнения ](https://youtu.be/qa-XleqA0JU?t=3390) +- [01:01:20 Очередность операторов (Operator precedence)](https://youtu.be/qa-XleqA0JU?t=3680) +- [01:13:25 Оператор Switch](https://youtu.be/qa-XleqA0JU?t=4405) + +## [Семинар: Базовый синтаксис языка JavaScript](https://youtu.be/PGqjTXQe_qw) + +## [Семинар: автоматическая проверка лабораторных работ](https://youtu.be/M4KpG0LEAyA) + +## [Введение в программирование (2 часть)](https://youtu.be/PzlLXQ3RaDs) + +- [0:00:01 введение](https://youtu.be/PzlLXQ3RaDs?t=1) +- [0:01:45 процедура или подпрограмма / Procedure or Subroutine](https://youtu.be/PzlLXQ3RaDs?t=105) +- [0:06:05 функция / Function](https://youtu.be/PzlLXQ3RaDs?t=365) +- [0:09:27 стек вызовов / Call Stack 0:18:26 Mixed Solution 0:21:42 принцип LIFO](https://youtu.be/PzlLXQ3RaDs?t=567) +- [0:22:09 куча и стек / Heap and Stack](https://youtu.be/PzlLXQ3RaDs?t=1329) +- [0:25:55 рекурсия / Recursion](https://youtu.be/PzlLXQ3RaDs?t=1555) +- [0:27:15 коллекция / Collection](https://youtu.be/PzlLXQ3RaDs?t=1635) +- [0:27:51 массив / Array](https://youtu.be/PzlLXQ3RaDs?t=1671) +- [0:28:18 отладка / Debug](https://youtu.be/PzlLXQ3RaDs?t=1698) +- [0:28:23 компонент / Component](https://youtu.be/PzlLXQ3RaDs?t=1703) +- [0:29:37 модуль / Module 0:30:16 модульность / Modularity 0:33:52 ограничения 0:31:50 заглушки / Stubs](https://youtu.be/PzlLXQ3RaDs?t=1777) +- [0:36:19 библиотека / Library](https://youtu.be/PzlLXQ3RaDs?t=2179) +- [0:37:13 импорт и экспорт идентификаторов / Import and Export Identifiers 0:41:30 новый синтаксис](https://youtu.be/PzlLXQ3RaDs?t=2233) +- [0:45:22 объект или экземпляр / Object or Instance 0:47:08 2 способа задания Instance](https://youtu.be/PzlLXQ3RaDs?t=2722) +- [0:47:47 класс / Class 0:49:16 примеры](https://youtu.be/PzlLXQ3RaDs?t=2867) +- [0:51:30 инстанциирование / Instantiation 0:52:59 примеры](https://youtu.be/PzlLXQ3RaDs?t=3090) +- [0:54:59 область видимости / Scope](https://youtu.be/PzlLXQ3RaDs?t=3299) +- [0:57:05 лексический(ое) контекст (окружение) / Lexical environment](https://youtu.be/PzlLXQ3RaDs?t=3425) +- [0:58:19 объектный контекст функции / Object context: this](https://youtu.be/PzlLXQ3RaDs?t=3499) +- [1:00:33 глобальный контекст / Global context](https://youtu.be/PzlLXQ3RaDs?t=3633) +- [1:04:35 монады](https://youtu.be/PzlLXQ3RaDs?t=3875) +- [1:09:00 парадигмы программирования](https://youtu.be/PzlLXQ3RaDs?t=4140) +- [1:12:05 лямбда-функция](https://youtu.be/PzlLXQ3RaDs?t=4325) +- [1:12:28 фрейм](https://youtu.be/PzlLXQ3RaDs?t=4348) +- [1:14:46 строка в свойстве объекта](https://youtu.be/PzlLXQ3RaDs?t=4486) +- [1:16:21 класс и объект](https://youtu.be/PzlLXQ3RaDs?t=4581) +- [1:16:47 класс и прототип](https://www.youtube.com/watch?v=PzlLXQ3RaDs&t=4607) +- [1:17:37 аллокирование значений в куче и стеке](https://youtu.be/PzlLXQ3RaDs?t=4607) +- [1:18:43 сборщик мусора](https://youtu.be/PzlLXQ3RaDs?t=4723) +- [1:20:29 терминология на английском и русском](https://youtu.be/PzlLXQ3RaDs?t=4829) + +## [Функции, лямбды (стрелочные функции), контексты, замыкания в JavaScript](https://youtu.be/pn5myCmpV2U) + +- [00:00:00 Введение ](https://youtu.be/pn5myCmpV2U?t=0) +- [00:11:22 Функция объявление (Declaration)](https://youtu.be/pn5myCmpV2U?t=682) +- [00:12:46 Функция выражение (Expression)](https://youtu.be/pn5myCmpV2U?t=766) +- [00:16:07 Лямбда-выражение (Lambda expression) или функция-стрелка (Arrow function) ](https://youtu.be/pn5myCmpV2U?t=967) +- [00:16:43 Лямбда-функция (Lambda function) ](https://youtu.be/pn5myCmpV2U?t=1003) +- [00:18:45 Область видимости (Scope)](https://youtu.be/pn5myCmpV2U?t=1125) +- [00:25:00 Функции, как абстракции](https://youtu.be/pn5myCmpV2U?t=1500) +- [00:26:43 Методы функции (name, length, toString( ) )](https://youtu.be/pn5myCmpV2U?t=1603) +- [00:31:26 Значения по умолчанию у функции ](https://youtu.be/pn5myCmpV2U?t=1886) +- [00:36:46 Rest-оператор (...args)](https://youtu.be/pn5myCmpV2U?t=2206) +- [00:41:49 Способ определения функции, через new Function](https://youtu.be/pn5myCmpV2U?t=2509) +- [00:44:46 Функции внутри объекта](https://youtu.be/pn5myCmpV2U?t=2686) +- [00:50:42 Обращение к полям объекта из привязанной функции, через this](https://youtu.be/pn5myCmpV2U?t=3042) +- [00:55:24 История синтаксиса создания контекстов, через самовызывающиеся функции ( IIFE)](https://youtu.be/pn5myCmpV2U?t=3324) +- [00:58:30 Методы функции, наследуемой от объекта (call, apply)](https://youtu.be/pn5myCmpV2U?t=3510) +- [01:00:53 Комментирование функций](https://youtu.be/pn5myCmpV2U?t=3653) +- [01:01:27 Задание декомпозиции функции](https://youtu.be/pn5myCmpV2U?t=3687) +- [01:04:24 Замыкание: context ](https://youtu.be/pn5myCmpV2U?t=3864) +- [01:08:41 Замыкание: chainning ](https://youtu.be/pn5myCmpV2U?t=4121) +- [01:11:55 Замыкание: summator ](https://youtu.be/pn5myCmpV2U?t=4315) +- [01:14:16 Замыкание: recursion](https://youtu.be/pn5myCmpV2U?t=4456) + +## [Массивы, объекты, классы, прототипы в JavaScript](https://youtu.be/VBMGnAPfmsY) + +- [00:00:00 Объекты](https://youtu.be/VBMGnAPfmsY?t=0) +- [00:11:01 Массивы](https://youtu.be/VBMGnAPfmsY?t=661) +- [00:13:29 Cериализация объекта ](https://youtu.be/VBMGnAPfmsY?t=809) +- [00:15:46 Cериализация массива ](https://youtu.be/VBMGnAPfmsY?t=946) +- [00:19:20 Методы array](https://youtu.be/VBMGnAPfmsY?t=1160) +- [00:20:22 Циклы ](https://youtu.be/VBMGnAPfmsY?t=1222) +- [00:21:16 Цикл for-in-object ](https://youtu.be/VBMGnAPfmsY?t=1276) +- [00:22:02 Цикл for-in-array](https://youtu.be/VBMGnAPfmsY?t=1322) +- [00:24:10 Цикл for-of-array ](https://youtu.be/VBMGnAPfmsY?t=1450) +- [00:25:05 Метод array.forEach](https://youtu.be/VBMGnAPfmsY?t=1505) +- [00:29:10 Метод array.map](https://youtu.be/VBMGnAPfmsY?t=1750) +- [00:33:59 Итерация матрицы, через for-of-array](https://youtu.be/VBMGnAPfmsY?t=2039) +- [00:38:38 Итерация матрицы, через array.forEach](https://youtu.be/VBMGnAPfmsY?t=2318) +- [00:39:22 Итерация матрицы, через for-in-array](https://youtu.be/VBMGnAPfmsY?t=2362) +- [00:39:45 Метод array.reduce](https://youtu.be/VBMGnAPfmsY?t=2385) +- [00:44:39 Методы объекта](https://youtu.be/VBMGnAPfmsY?t=2679) +- [00:46:38 Прототип](https://youtu.be/VBMGnAPfmsY?t=2798) +- [00:53:32 Класс ](https://youtu.be/VBMGnAPfmsY?t=3212) +- [00:56:04 Связывание методов с объектом, при помощи замыкания](https://youtu.be/VBMGnAPfmsY?t=3364) +- [01:00:08 Связывание методов с объектом, при помощи метода bind](https://youtu.be/VBMGnAPfmsY?t=3608) +- [01:03:19 Пример абстракции, при помощи замыкания](https://youtu.be/VBMGnAPfmsY?t=3799) +- [01:11:05 Пример абстракции, при помощи прототипа](https://youtu.be/VBMGnAPfmsY?t=4265) +- [01:12:30 Пример абстракции, при помощи класса](https://youtu.be/VBMGnAPfmsY?t=4350) +- [01:13:08 Наследование через синтаксис прототипов](https://youtu.be/VBMGnAPfmsY?t=4388) +- [01:18:50 Наследование через синтаксис классов ](https://youtu.be/VBMGnAPfmsY?t=4730) +- [01:21:05 Связывание объекта с методом класса при помощи прототипа ](https://youtu.be/VBMGnAPfmsY?t=4865) +- [01:23:52 Присваивание методов внутри конструктора, при прототипном подходе ](https://youtu.be/VBMGnAPfmsY?t=5032) +- [01:25:10 Get/Set класса ](https://youtu.be/VBMGnAPfmsY?t=5110) +- [01:27:00 Пример](https://youtu.be/VBMGnAPfmsY?t=5220) + +## [Языки программирования: обзор, сравнение, выбор](https://youtu.be/enHA1CRkJe0) + +- [0:00:02 обзорная лекция о классификации ЯП](https://youtu.be/enHA1CRkJe0?t=2) +- [0:00:53 типизация: статическая / динамическая](https://youtu.be/enHA1CRkJe0?t=53) +- [0:07:37 сильная / слабая || строгая / нестрогая](https://youtu.be/enHA1CRkJe0?t=457) +- [0:10:08 явная / неявная](https://youtu.be/enHA1CRkJe0?t=608) +- [0:13:58 утиная 0:18:26 протоколы](https://youtu.be/enHA1CRkJe0?t=838) +- [0:20:36 ниже и ближе к машине / выше и ближе к человеку](https://youtu.be/enHA1CRkJe0?t=1236) +- [0:32:20 сравнение asm и машинного кода](https://youtu.be/enHA1CRkJe0?t=1940) +- [0:39:38 сравнение asm и js](https://youtu.be/enHA1CRkJe0?t=2378) +- [0:42:47 функции и типы 1 класса](https://youtu.be/enHA1CRkJe0?t=2567) +- [0:44:39 распространённость](https://youtu.be/enHA1CRkJe0?t=2679) +- [0:45:47 скорость, читаемость](https://youtu.be/enHA1CRkJe0?t=2747) +- [0:48:21 владение правами / влияние на ЯП](https://youtu.be/enHA1CRkJe0?t=2901) +- [0:51:13 специализация](https://youtu.be/enHA1CRkJe0?t=3073) +- [0:53:13 наследственность](https://youtu.be/enHA1CRkJe0?t=3193) +- [0:56:33 инструментарий](https://youtu.be/enHA1CRkJe0?t=3393) +- [0:58:20 поддержка](https://youtu.be/enHA1CRkJe0?t=3500) +- [1:02:58 скорость развития](https://youtu.be/enHA1CRkJe0?t=3778) +- [1:04:12 системное программирование](https://youtu.be/enHA1CRkJe0?t=3852) +- [1:05:51 оконные приложения](https://youtu.be/enHA1CRkJe0?t=3951) +- [1:06:27 встраиваемые системы и автоматизация](https://youtu.be/enHA1CRkJe0?t=3987) +- [1:07:02 базы данных](https://youtu.be/enHA1CRkJe0?t=4022) +- [1:07:45 сетевые сервера](https://youtu.be/enHA1CRkJe0?t=4065) +- [1:09:03 вычисления](https://youtu.be/enHA1CRkJe0?t=4143) +- [1:10:45 ИИ](https://youtu.be/enHA1CRkJe0?t=4245) +- [1:11:52 параллельные вычисления, веб](https://youtu.be/enHA1CRkJe0?t=4312) +- [1:12:38 скрипты](https://youtu.be/enHA1CRkJe0?t=4358) +- [1:13:36 тестирование](https://youtu.be/enHA1CRkJe0?t=4416) +- [1:14:20 мобильные платформы](https://youtu.be/enHA1CRkJe0?t=4460) +- [1:16:10 игры, графика](https://youtu.be/enHA1CRkJe0?t=4570) + +## [JavaScript: Ответы на вопросы](https://youtu.be/wqkQ6eslyzY) + +- [0:00:02 введение](https://youtu.be/wqkQ6eslyzY?t=2) +- [0:00:41 разделение ЯП по модели работы с памятью](https://youtu.be/wqkQ6eslyzY?t=41) +- [0:08:32 почему надо использовать const, реже let и избегать var](https://youtu.be/wqkQ6eslyzY?t=512) +- [0:17:43 + и - утиной типизации](https://youtu.be/wqkQ6eslyzY?t=1063) +- [0:30:03 примеры ЯП с разной типизацией](https://youtu.be/wqkQ6eslyzY?t=1803) +- [0:32:29 чем выше ЯП, тем он медленнее?](https://youtu.be/wqkQ6eslyzY?t=1949) +- [0:34:15 почему бы js не компилировать напрямую в машинный код](https://youtu.be/wqkQ6eslyzY?t=2055) +- [0:35:37 скорость и производительность ЯП](https://youtu.be/wqkQ6eslyzY?t=2137) +- [0:40:47 константы и ключевое слово const](https://youtu.be/wqkQ6eslyzY?t=2447) +- [0:45:48 зачем учить именно js](https://youtu.be/wqkQ6eslyzY?t=2748) +- [0:59:28 typescript - js с типами? Развитость инфраструктуры ts](https://youtu.be/wqkQ6eslyzY?t=3568) + +## [Частичное применение и каррирование в JavaScript](https://youtu.be/ND8KQ5xjk7o) + +- [00:00:00 Замыкание](https://youtu.be/ND8KQ5xjk7o?t=0) +- [00:04:54 Лямбда- функция](https://youtu.be/ND8KQ5xjk7o?t=294) +- [00:06:06 Метод bind](https://youtu.be/ND8KQ5xjk7o?t=366) +- [00:08:30 Абстрагированный пример функции](https://youtu.be/ND8KQ5xjk7o?t=510) +- [00:13:42 Абстрагированный пример функции (расширение)](https://youtu.be/ND8KQ5xjk7o?t=822) +- [00:15:47 Неправильная реализация каррирования](https://youtu.be/ND8KQ5xjk7o?t=947) +- [00:22:22 Правильная реализация каррирования](https://youtu.be/ND8KQ5xjk7o?t=1342) +- [00:28:54 Правильная реализация каррирования (расширение)](https://youtu.be/ND8KQ5xjk7o?t=1734) +- [00:31:41 Функциональные абстракции (superposition)](https://youtu.be/ND8KQ5xjk7o?t=1901) +- [00:38:02 Функциональные абстракции, с сохранением выражений (composition)](https://youtu.be/ND8KQ5xjk7o?t=2282) +- [00:45:05 Композиция с 2 функциями](https://youtu.be/ND8KQ5xjk7o?t=2705) +- [00:46:05 Композиция с n - функциями, при помощи метода reduce](https://youtu.be/ND8KQ5xjk7o?t=2765) +- [00:51:25 Композиция с n - функциями, при помощи цикла](https://youtu.be/ND8KQ5xjk7o?t=3085) +- [00:54:29 Композиция с n - функциями, при помощи рекурсии](https://youtu.be/ND8KQ5xjk7o?t=3269) +- [00:57:40 Композиция асинхронных функций](https://youtu.be/ND8KQ5xjk7o?t=3460) +- [01:01:27 Обобщение](https://youtu.be/ND8KQ5xjk7o?t=3687) + +## [Функции высшего порядка, колбеки, события на JavaScript](https://youtu.be/1vqATwbGHnc) + +- [00:00:00 Определение](https://youtu.be/1vqATwbGHnc?t=0) +- [00:02:03 Математическая функция](https://youtu.be/1vqATwbGHnc?t=123) +- [00:05:57 Функция обратного вызова (callback) ](https://youtu.be/1vqATwbGHnc?t=357) +- [00:09:33 Замыкание](https://youtu.be/1vqATwbGHnc?t=573) +- [00:10:51 Цепочка вызовов ](https://youtu.be/1vqATwbGHnc?t=651) +- [00:12:40 Сохранение кэша с помощью замыкания](https://youtu.be/1vqATwbGHnc?t=760) +- [00:18:29 Добавление функции поведение логирования](https://youtu.be/1vqATwbGHnc?t=1109) +- [00:21:45 Обобщение](https://youtu.be/1vqATwbGHnc?t=1305) +- [00:22:45 Сallback](https://youtu.be/1vqATwbGHnc?t=1365) +- [00:25:32 Сallback асинхронной функции считывание файла](https://youtu.be/1vqATwbGHnc?t=1532) +- [00:28:36 Сallback именованный](https://youtu.be/1vqATwbGHnc?t=1716) +- [00:33:01 Сallback-timer ](https://youtu.be/1vqATwbGHnc?t=1981) +- [00:36:20 Сallback-timer-curry](https://youtu.be/1vqATwbGHnc?t=2180) +- [00:38:59 Listener](https://youtu.be/1vqATwbGHnc?t=2339) +- [00:41:10 Listener-timer](https://youtu.be/1vqATwbGHnc?t=2470) +- [00:46:59 Event](https://youtu.be/1vqATwbGHnc?t=2819) +- [00:53:45 Event-imitter](https://youtu.be/1vqATwbGHnc?t=3225) +- [00:57:48 Deferred object (отложенный объект)](https://youtu.be/1vqATwbGHnc?t=3468) +- [01:01:31 Errors](https://youtu.be/1vqATwbGHnc?t=3691) + +## [Работа со строками, шаблонами и юникодом в JavaScript](https://youtu.be/GcopcHQkA8M) + +- [00:00:00 Unicode строки](https://youtu.be/GcopcHQkA8M?t=0) +- [00:12:07 Обычные строки](https://youtu.be/GcopcHQkA8M?t=727) +- [00:17:03 Методы строки ](https://youtu.be/GcopcHQkA8M?t=1023) +- [00:23:09 Модификация строк ](https://youtu.be/GcopcHQkA8M?t=1389) +- [00:28:00 Получение подстроки в строке ](https://youtu.be/GcopcHQkA8M?t=1680) +- [00:34:45 Polyffill ](https://youtu.be/GcopcHQkA8M?t=2085) +- [00:37:54 Методы padEnd и padStart ](https://youtu.be/GcopcHQkA8M?t=2274) +- [00:40:45 Добавление функции для шаблонизирующей строки](https://youtu.be/GcopcHQkA8M?t=2445) +- [00:44:27 Пример ](https://youtu.be/GcopcHQkA8M?t=2667) +- [00:48:29 Библиотека Concolor.js](https://youtu.be/GcopcHQkA8M?t=2909) + +## [Регулярные выражения и парсинг в JavaScript](https://youtu.be/-ef2E0ozxao) + +- [00:00:00 Введение](https://youtu.be/-ef2E0ozxao?t=0) +- [00:10:30 Синтаксис регулярных выражений ](https://youtu.be/-ef2E0ozxao?t=630) +- [00:12:54 Задание регулярного выражения ](https://youtu.be/-ef2E0ozxao?t=774) +- [00:30:38 RegExp ](https://youtu.be/-ef2E0ozxao?t=1838) +- [00:38:11 Метод match ](https://youtu.be/-ef2E0ozxao?t=2291) +- [00:46:48 Метод split](https://youtu.be/-ef2E0ozxao?t=2808) +- [00:49:28 Метод replace ](https://youtu.be/-ef2E0ozxao?t=2968) +- [00:50:43 Метод replace с аргументом функции ](https://youtu.be/-ef2E0ozxao?t=3043) +- [00:53:28 Метод search ](https://youtu.be/-ef2E0ozxao?t=3208) +- [00:55:05 Обобщение](https://youtu.be/-ef2E0ozxao?t=3305) + +## [Примеси, обертки, декораторы, мемоизация в JavaScript](https://youtu.be/oRQ0kQr1N-U) + +- [00:00:00 Синхронная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=0) +- [00:02:55 Синхронная универсальная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=175) +- [00:08:28 Асинхронная универсальная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=508) +- [00:15:50 Синхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/oRQ0kQr1N-U?t=950) +- [00:22:45 Асинхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/oRQ0kQr1N-U?t=1365) +- [00:25:38 Функция-обертка, которая ограничивает вызов функции до одного вызова (once) ](https://youtu.be/oRQ0kQr1N-U?t=1538) +- [00:27:36 Функция-обертка, которая ограничивает вызов функции до n-го вызова (limit)](https://youtu.be/oRQ0kQr1N-U?t=1656) +- [00:29:50 Функция-обертка, которая отменяет вызов функции (cancel)](https://youtu.be/oRQ0kQr1N-U?t=1790) +- [00:32:29 Функция-обертка с методами timeout, limit, cancel](https://youtu.be/oRQ0kQr1N-U?t=1949) +- [00:39:03 Функция-обертка с методами timeout, limit, cancel (оптимизированная)](https://youtu.be/oRQ0kQr1N-U?t=2343) +- [00:42:28 Функция-обертка, которая ограничивает один вызов за 200 мс (throttle)](https://youtu.be/oRQ0kQr1N-U?t=2548) +- [00:45:47 Примесь поля через точку ](https://youtu.be/oRQ0kQr1N-U?t=2747) +- [00:51:35 Примесь поля через функцию extend](https://youtu.be/oRQ0kQr1N-U?t=3095) +- [00:57:35 Примесь поля через object.assign( )](https://youtu.be/oRQ0kQr1N-U?t=3455) +- [00:59:18 Примесь поведения ](https://youtu.be/oRQ0kQr1N-U?t=3558) +- [01:02:23 Примесь изменения класса](https://youtu.be/oRQ0kQr1N-U?t=3743) +- [01:06:50 Определение](https://youtu.be/oRQ0kQr1N-U?t=4010) +- [01:07:30 Реализация простой мемоизации ](https://youtu.be/oRQ0kQr1N-U?t=4050) +- [01:14:43 Реализация простой мемоизации с проверкой скорости ](https://youtu.be/oRQ0kQr1N-U?t=4483) +- [01:20:43 Удаление накопленного кэша ](https://youtu.be/oRQ0kQr1N-U?t=4843) +- [01:25:35 Асинхронная мемоизация ](https://youtu.be/oRQ0kQr1N-U?t=5135) +- [01:31:10 Преобразование аргументов и ключей в hash-функцию](https://youtu.be/oRQ0kQr1N-U?t=5470) +- [01:33:32 Реализация сложной мемоизации](https://youtu.be/oRQ0kQr1N-U?t=5612) + +## [Консоль и командная строка в JavaScript и Node.js](https://youtu.be/5aSZyKi5BmE) + +- [1:20 console](https://youtu.be/5aSZyKi5BmE?t=80) +- [16:00 readline](https://youtu.be/5aSZyKi5BmE?t=960) +- [21:35 cli](https://youtu.be/5aSZyKi5BmE?t=1295) +- [31:15 делаем красивый login screen](https://youtu.be/5aSZyKi5BmE?t=1875) + +## [Чеининг функций и объектов, обработка ошибок в JavaScript](https://youtu.be/PfuEfIiLX34) + +- [00:00:00 Введение ](https://youtu.be/PfuEfIiLX34?t=0) +- [00:01:10 Чеининг через синтаксис вызова функций ](https://youtu.be/PfuEfIiLX34?t=70) +- [00:02:12 Prototype ](https://youtu.be/PfuEfIiLX34?t=132) +- [00:05:45 Сlass](https://youtu.be/PfuEfIiLX34?t=345) +- [00:06:11 Functor](https://youtu.be/PfuEfIiLX34?t=371) +- [00:11:54 Mutable](https://youtu.be/PfuEfIiLX34?t=714) +- [00:16:34 Iterator](https://youtu.be/PfuEfIiLX34?t=994) +- [00:26:18 Promise ](https://youtu.be/PfuEfIiLX34?t=1578) +- [00:26:35 Test](https://youtu.be/PfuEfIiLX34?t=1595) +- [00:37:08 Compare ](https://youtu.be/PfuEfIiLX34?t=2228) +- [00:39:45 Benchmark](https://youtu.be/PfuEfIiLX34?t=2385) +- [00:40:48 Запуск и анализ тестов ](https://youtu.be/PfuEfIiLX34?t=2448) +- [01:03:48 Первый способ возвращение ошибок в синхронном коде ](https://youtu.be/PfuEfIiLX34?t=3828) +- [01:09:24 Второй способ возвращение ошибок в синхронном коде ](https://youtu.be/PfuEfIiLX34?t=4164) +- [01:12:26 Возвращение ошибок в асинхронном коде ](https://youtu.be/PfuEfIiLX34?t=4346) +- [01:16:14 Корректное возвращение ошибок ](https://youtu.be/PfuEfIiLX34?t=4574) +- [01:20:03 Обработка ошибок c promise ](https://youtu.be/PfuEfIiLX34?t=4803) +- [01:23:58 Обработка ошибок c async-await](https://youtu.be/PfuEfIiLX34?t=5038) + +## [Таймеры, таймауты, EventEmitter в JavaScript и Node.js](https://youtu.be/LK2jveAnRNg) + +- [0:30 callback sync/async](https://youtu.be/LK2jveAnRNg?t=30) +- [1:35 временная задержка sleep.js](https://youtu.be/LK2jveAnRNg?t=95) +- [5:35 await-sleep.js](https://youtu.be/LK2jveAnRNg?t=335) +- [8:40 sleep-then.js](https://youtu.be/LK2jveAnRNg?t=520) +- [9:30 order.js](https://youtu.be/LK2jveAnRNg?t=570) +- [18:38 precision.js](https://youtu.be/LK2jveAnRNg?t=1118) +- [22:13 blocking.js](https://youtu.be/LK2jveAnRNg?t=1333) +- [22:50 timers.js](https://youtu.be/LK2jveAnRNg?t=1370) +- [29:35 ref-unref.js](https://youtu.be/LK2jveAnRNg?t=1775) +- [32:05 enroll.js](https://youtu.be/LK2jveAnRNg?t=1925) +- [34:57 eventloop.txt](https://youtu.be/LK2jveAnRNg?t=2097) +- [37:37 eventEmitter](https://youtu.be/LK2jveAnRNg?t=2257) +- [44:32 simple.js](https://youtu.be/LK2jveAnRNg?t=2672) +- [47:48 usage.js](https://youtu.be/LK2jveAnRNg?t=2868) +- [48:30 enhanced.js](https://youtu.be/LK2jveAnRNg?t=2910) +- [50:18 star-fix.js](https://youtu.be/LK2jveAnRNg?t=3018) +- [51:10 usage.js](https://youtu.be/LK2jveAnRNg?t=3070) +- [53:15 closure.js](https://youtu.be/LK2jveAnRNg?t=3195) +- [54:50 fp.js](https://youtu.be/LK2jveAnRNg?t=3290) +- [57:10 methods.js](https://youtu.be/LK2jveAnRNg?t=3430) +- [1:06:35 min.js](https://youtu.be/LK2jveAnRNg?t=3995) +- [1:12:31 prod.js](https://youtu.be/LK2jveAnRNg?t=4351) + +## [Итерирование, циклы и итераторы в JavaScript](https://youtu.be/lq3b5_UGJas) + +- [00:00:00 Цикл for](https://youtu.be/lq3b5_UGJas?t=0) +- [00:02:45 Цикл while](https://youtu.be/lq3b5_UGJas?t=165) +- [00:03:16 Цикл do while ](https://youtu.be/lq3b5_UGJas?t=196) +- [00:03:33 Цикл for in object ](https://youtu.be/lq3b5_UGJas?t=213) +- [00:04:40 Цикл for in array](https://youtu.be/lq3b5_UGJas?t=280) +- [00:06:44 Цикл for of](https://youtu.be/lq3b5_UGJas?t=404) +- [00:08:45 Оператор break](https://youtu.be/lq3b5_UGJas?t=525) +- [00:10:13 Оператор continue](https://youtu.be/lq3b5_UGJas?t=613) +- [00:12:12 Итерирование по массиву методом forEach](https://youtu.be/lq3b5_UGJas?t=732) +- [00:15:10 Итерирование по массиву методом map ](https://youtu.be/lq3b5_UGJas?t=910) +- [00:21:23 Итерирование по двухмерному массиву (мatrix)](https://youtu.be/lq3b5_UGJas?t=1283) +- [00:25:38 Итерирование по двухмерному массиву (мatrix) методом forEach](https://youtu.be/lq3b5_UGJas?t=1538) +- [00:26:08 Итерирование массива методом reduce](https://youtu.be/lq3b5_UGJas?t=1568) +- [00:28:49 Итерирование по объекту ](https://youtu.be/lq3b5_UGJas?t=1729) +- [00:37:32 Обратный итератор ](https://youtu.be/lq3b5_UGJas?t=2252) +- [00:40:42 Асинхронный итератор](https://youtu.be/lq3b5_UGJas?t=2442) + +## [Архитектурный подход к программированию](https://youtu.be/d_vyO2CkiOc) + +- [00:00:00 Когда нужна архитектура](https://youtu.be/d_vyO2CkiOc?t=0) +- [00:06:07 Принятие решений](https://youtu.be/d_vyO2CkiOc?t=367) +- [00:09:58 Типы связывания](https://youtu.be/d_vyO2CkiOc?t=598) +- [00:20:00 Ошибки](https://youtu.be/d_vyO2CkiOc?t=1200) +- [00:27:15 Принятие решений](https://youtu.be/d_vyO2CkiOc?t=1635) +- [00:37:05 Эволюция архитектурных решений](https://youtu.be/d_vyO2CkiOc?t=2225) +- [00:58:13 Схема современной архитектуры](https://youtu.be/d_vyO2CkiOc?t=3493) +- [01:01:40 субд в браузере](https://youtu.be/d_vyO2CkiOc?t=3700) +- [01:05:20 Альтернативные варианты](https://youtu.be/d_vyO2CkiOc?t=3920) +- [01:12:20 Как на самом деле](https://youtu.be/d_vyO2CkiOc?t=4340) +- [01:13:45 Архитектура мечты](https://youtu.be/d_vyO2CkiOc?t=4425) +- [01:16:45 Современные возможности и требования ](https://youtu.be/d_vyO2CkiOc?t=4605) +- [01:25:20 Топологии](https://youtu.be/d_vyO2CkiOc?t=5120) +- [01:30:45 Итог](https://youtu.be/d_vyO2CkiOc?t=5445) + +## [Функциональное программирование на JavaScript](https://youtu.be/0JxSs_GcvbQ) + +## [Реактивное программирование на JavaScript](https://youtu.be/7MH8-qQc-48) + +- [0:00 введение](https://youtu.be/7MH8-qQc-48?t=0) +- [3:00 imperative.js](https://youtu.be/7MH8-qQc-48?t=180) +- [4:00 set-get.js](https://youtu.be/7MH8-qQc-48?t=240) +- [7:15 proxy.js](https://youtu.be/7MH8-qQc-48?t=435) +- [23:07 observer.js](https://youtu.be/7MH8-qQc-48?t=1387) + +## [Асинхронное программирование на callback`ах в JavaScript](https://youtu.be/z8Hg6zgi3yQ) + +- [1:20 пример callback функции](https://youtu.be/z8Hg6zgi3yQ?t=80) +- [2:40 пример последовательного исполнения callback функций](https://youtu.be/z8Hg6zgi3yQ?t=160) +- [5:52 пример параллельного исполнения async функций c использованием wrapAsync](https://youtu.be/z8Hg6zgi3yQ?t=352) +- [15:18 пример последовательного исполнения async функций c использованием wrapAsync](https://youtu.be/z8Hg6zgi3yQ?t=918) +- [19:05 chain исполнение async функций](https://youtu.be/z8Hg6zgi3yQ?t=1145) +- [41:16 где можно встретить асинхронные функции](https://youtu.be/z8Hg6zgi3yQ?t=2476) + +## [Проекции и отображения наборов данных в JavaScript](https://youtu.be/lwJCq9inky8) + +- [00:00:00 Введение ](https://youtu.be/lwJCq9inky8?t=0) +- [00:01:50 Простая проекция набора данных ](https://youtu.be/lwJCq9inky8?t=110) +- [00:09:23 Расширенная проекция набора данных ](https://youtu.be/lwJCq9inky8?t=563) +- [00:19:00 Расширенная проекция набора данных с кэшированием списка ключей](https://youtu.be/lwJCq9inky8?t=1140) +- [00:20:27 Оптимизация проекции набора данных с помощью императивного программирования ](https://youtu.be/lwJCq9inky8?t=1227) +- [00:23:11 Линзы из функционального программирования ](https://youtu.be/lwJCq9inky8?t=1391) +- [00:32:29 Сложная проекция набора данных ( проекция изнутри и снаружи ) ](https://youtu.be/lwJCq9inky8?t=1949) +- [00:39:08 Сложная проекция набора данных с помощью декларативного программирования ](https://youtu.be/lwJCq9inky8?t=2348) +- [00:41:57 Оптимизация сложной проекции ](https://youtu.be/lwJCq9inky8?t=2517) +- [00:51:36 Синтаксис фильтрации ](https://youtu.be/lwJCq9inky8?t=3096) +- [00:53:25 Вывод ](https://youtu.be/lwJCq9inky8?t=3205) +- [00:58:08 Оптимизация](https://youtu.be/lwJCq9inky8?t=3488) +- [01:00:00 Обобщение](https://youtu.be/lwJCq9inky8?t=3600) + +## [Коллекции, множества, хештаблицы в JavaScript](https://youtu.be/hN0wsq5LNOc) + +- [00:00:00 Введение](https://youtu.be/hN0wsq5LNOc?t=0) +- [00:01:35 Массивы ](https://youtu.be/hN0wsq5LNOc?t=95) +- [00:01:56 Склеивание массива методом concat ](https://youtu.be/hN0wsq5LNOc?t=116) +- [00:02:02 Склеивание массива оператором spread ](https://youtu.be/hN0wsq5LNOc?t=122) +- [00:03:17 Объекты ](https://youtu.be/hN0wsq5LNOc?t=197) +- [00:03:28 Склеивание объектов методом object.assign ](https://youtu.be/hN0wsq5LNOc?t=208) +- [00:04:01 Склеивание объектов оператором spread ](https://youtu.be/hN0wsq5LNOc?t=241) +- [00:04:38 Символический тип ](https://youtu.be/hN0wsq5LNOc?t=278) +- [00:06:50 Сохранение коллекции в файл ](https://youtu.be/hN0wsq5LNOc?t=410) +- [00:08:45 Использование конструированного map ](https://youtu.be/hN0wsq5LNOc?t=525) +- [00:14:29 Использование встроенного map ](https://youtu.be/hN0wsq5LNOc?t=869) +- [00:15:01 Отличия конструированного и встроенного map](https://youtu.be/hN0wsq5LNOc?t=901) +- [00:16:49 Способы итерации по map ](https://youtu.be/hN0wsq5LNOc?t=1009) +- [00:18:15 Построение индексов помощью map](https://youtu.be/hN0wsq5LNOc?t=1095) +- [00:23:15 WeakMap](https://youtu.be/hN0wsq5LNOc?t=1395) +- [00:27:55 Отдача значения без ключа ](https://youtu.be/hN0wsq5LNOc?t=1675) +- [00:29:15 Хранение уникальных значений ](https://youtu.be/hN0wsq5LNOc?t=1755) +- [00:33:32 Операции со массивами ](https://youtu.be/hN0wsq5LNOc?t=2012) +- [00:39:48 Операции над множествами ](https://youtu.be/hN0wsq5LNOc?t=2388) +- [00:42:32 WeakSet ](https://youtu.be/hN0wsq5LNOc?t=2552) +- [00:47:15 Обобщение](https://youtu.be/hN0wsq5LNOc?t=2835) + +## [Неблокирующее асинхронное итерирование в JavaScript](https://youtu.be/wYA2cIRYLoA) + +- [1:02 блокирующее итерирование по массиву](https://youtu.be/wYA2cIRYLoA?t=62) +- [3:24 блокирующее итерирование с помощью for await](https://youtu.be/wYA2cIRYLoA?t=204) +- [4:47 неблокирующее итерирование с помощью setTimeout](https://youtu.be/wYA2cIRYLoA?t=287) +- [6:45 неблокирующее итерирование с помощью for await](https://youtu.be/wYA2cIRYLoA?t=405) +- [8:20 неблокирующее итерирование без задержки](https://youtu.be/wYA2cIRYLoA?t=500) +- [13:00 неблокирующее итерирование без задержки с помощью for await](https://youtu.be/wYA2cIRYLoA?t=780) +- [19:30 использование асинхронного итерирования для обычных массивов](https://youtu.be/wYA2cIRYLoA?t=1170) + +## [Структуры данных: списки, стек, очередь, дэк в JavaScript](https://youtu.be/9KvA4hDDSjk) + +- [00:00:00 Идея структуры данных](https://youtu.be/9KvA4hDDSjk?t=0) +- [00:02:27 Списки на прототипах ( абстракция элемента ) ](https://youtu.be/9KvA4hDDSjk?t=147) +- [00:06:23 Списки на объектах ](https://youtu.be/9KvA4hDDSjk?t=383) +- [00:07:28 Списки на замыканиях](https://youtu.be/9KvA4hDDSjk?t=448) +- [00:10:56 Списки на объектах ( абстракция элемента и списка ) ](https://youtu.be/9KvA4hDDSjk?t=656) +- [00:18:22 Списки на классах](https://youtu.be/9KvA4hDDSjk?t=1102) +- [00:21:08 Стек на прототипах ( двух-связанный)](https://youtu.be/9KvA4hDDSjk?t=1268) +- [00:28:17 Стек на классах (односвязный)](https://youtu.be/9KvA4hDDSjk?t=1697) +- [00:29:55 Очередь](https://youtu.be/9KvA4hDDSjk?t=1795) +- [00:34:26 Дэк](https://youtu.be/9KvA4hDDSjk?t=2066) + +## [Proxy и Symbol в JavaScript](https://youtu.be/UjZjSDyi9AM) + +- [00:00:00 Определение Proxy](https://youtu.be/UjZjSDyi9AM?t=0) +- [00:01:20 Обращение к свойствам объекта, находящегося внутри proxy](https://youtu.be/UjZjSDyi9AM?t=80) +- [00:04:10 Доступ к состоянию объекта через Getter и Setter ](https://youtu.be/UjZjSDyi9AM?t=250) +- [00:05:13 Доступ к состоянию объекта через Proxy ](https://youtu.be/UjZjSDyi9AM?t=313) +- [00:07:40 Проверка наличие свойств ](https://youtu.be/UjZjSDyi9AM?t=460) +- [00:11:22 Удаление свойств](https://youtu.be/UjZjSDyi9AM?t=682) +- [00:13:26 Обращение к аргументам функции, находящегося внутри proxy ](https://youtu.be/UjZjSDyi9AM?t=806) +- [00:15:30 Другие Proxy обработчики (Proxy handler )](https://youtu.be/UjZjSDyi9AM?t=930) +- [00:19:00 Proxy.revocable ](https://youtu.be/UjZjSDyi9AM?t=1140) +- [00:20:43 Определение Symbol ](https://youtu.be/UjZjSDyi9AM?t=1243) +- [00:23:00 Вывод и сравнение Symbol ](https://youtu.be/UjZjSDyi9AM?t=1380) +- [00:25:10 Type](https://youtu.be/UjZjSDyi9AM?t=1510) +- [00:29:51 Symbol.for](https://youtu.be/UjZjSDyi9AM?t=1791) +- [00:34:45 Symbol.iterator ](https://youtu.be/UjZjSDyi9AM?t=2085) +- [00:43:52 Symbol.toPrimitive](https://youtu.be/UjZjSDyi9AM?t=2632) +- [00:47:00 hideSymbol](https://youtu.be/UjZjSDyi9AM?t=2820) + +## [Сериализация и десериализация в JavaScript и Node.js](https://youtu.be/GtKPniOEzh8) + +- [00:00:00 Введение ](https://youtu.be/GtKPniOEzh8?t=0) +- [00:01:50 Виды сериализации ](https://youtu.be/GtKPniOEzh8?t=110) +- [00:02:45 Сериализатор console.dir ](https://youtu.be/GtKPniOEzh8?t=165) +- [00:03:45 Cериализатор CSV](https://youtu.be/GtKPniOEzh8?t=225) +- [00:05:42 Сериализатор JSON ](https://youtu.be/GtKPniOEzh8?t=342) +- [00:10:00 Сериализатор функции](https://youtu.be/GtKPniOEzh8?t=600) +- [00:15:25 Сериализатор функции разных типов (расширяемый)](https://youtu.be/GtKPniOEzh8?t=925) +- [00:23:06 Десереализация ](https://youtu.be/GtKPniOEzh8?t=1386) +- [00:25:26 Сериализация объекта в бинарный формат, с помощью библиотеки v8 ](https://youtu.be/GtKPniOEzh8?t=1526) +- [00:28:26 Сериализация объекта, с помощью разных библиотек](https://youtu.be/GtKPniOEzh8?t=1706) + +## [Асинхронность с библиотекой async.js](https://youtu.be/XQ94wQc-erU) + +## [Фабрики и пулы объектов в JavaScript, factorify, poolify](https://youtu.be/Ax_mSvadFp8) + +- [00:00:00 Введение ](https://youtu.be/Ax_mSvadFp8?t=0) +- [00:02:38 Фабрика ( factory )](https://youtu.be/Ax_mSvadFp8?t=158) +- [00:05:44 Фабрика прототипов ](https://youtu.be/Ax_mSvadFp8?t=344) +- [00:10:48 Фабрика классов ](https://youtu.be/Ax_mSvadFp8?t=648) +- [00:12:28 Фабрика функций ](https://youtu.be/Ax_mSvadFp8?t=748) +- [00:15:55 Фабричные методы ](https://youtu.be/Ax_mSvadFp8?t=955) +- [00:16:55 Превращение функций в фабрику ( factorify)](https://youtu.be/Ax_mSvadFp8?t=1015) +- [00:19:44 Пул ( pool )](https://youtu.be/Ax_mSvadFp8?t=1184) +- [00:23:05 Работа с пулом ](https://youtu.be/Ax_mSvadFp8?t=1385) +- [00:23:04 Обобщенный пул](https://youtu.be/Ax_mSvadFp8?t=1384) +- [00:24:55 Пулифицирование фабрики ( poolify ) ](https://youtu.be/Ax_mSvadFp8?t=1495) +- [00:28:50 Улучшенная пулифицированная фабрика ](https://youtu.be/Ax_mSvadFp8?t=1730) +- [00:32:10 Асинхронная работа с пулом ](https://youtu.be/Ax_mSvadFp8?t=1930) +- [00:45:25 Одновременное использование factorify и poolify ](https://youtu.be/Ax_mSvadFp8?t=2725) +- [00:51:54 Обобщение](https://youtu.be/Ax_mSvadFp8?t=3114) + +## [Подход к изучению программирования (выступление на дне факультета Информатики КПИ 12 декабря 2018)](https://youtu.be/zMU4ir10DMg) + +- [00:40 Что нужно знать?](https://youtu.be/zMU4ir10DMg?t=40) +- [03:41 Откуда брать знания ](https://youtu.be/zMU4ir10DMg?t=221) +- [07:39 Проблемы отрасли ](https://youtu.be/zMU4ir10DMg?t=459) +- [13:12 Дерево парадигм ](https://youtu.be/zMU4ir10DMg?t=792) +- [14:15 Технологии и техники](https://youtu.be/zMU4ir10DMg?t=855) +- [14:32 Разница парадигм](https://youtu.be/zMU4ir10DMg?t=872) +- [14:48 Что общего в парадигмах](https://youtu.be/zMU4ir10DMg?t=888) +- [15:33 Прочие парадигмы и техники](https://youtu.be/zMU4ir10DMg?t=933) +- [17:46 Мультипарадигменность](https://youtu.be/zMU4ir10DMg?t=1066) +- [18:46 Метапрограммирование](https://youtu.be/zMU4ir10DMg?t=1126) +- [19:13 Как не деградировать?](https://youtu.be/zMU4ir10DMg?t=1153) +- [21:29 Как найти общий язык? ](https://youtu.be/zMU4ir10DMg?t=1289) +- [24:31 Задачи программной инженерии](https://youtu.be/zMU4ir10DMg?t=1471) +- [28:19 Преодоление сложности ](https://youtu.be/zMU4ir10DMg?t=1699) +- [28:21 Связывание данных и логики](https://youtu.be/zMU4ir10DMg?t=1701) +- [28:30 Различные концепции ](https://youtu.be/zMU4ir10DMg?t=1710) +- [29:40 ВУЗ должен меняться](https://youtu.be/zMU4ir10DMg?t=1780) +- [33:53 Неспециальные предметы](https://youtu.be/zMU4ir10DMg?t=2033) +- [35:18 Чего не хватает](https://youtu.be/zMU4ir10DMg?t=2118) +- [36:57 Проблем много ](https://youtu.be/zMU4ir10DMg?t=2217) +- [40:20 ВУЗ должен знать](https://youtu.be/zMU4ir10DMg?t=2420) + +## [Асинхронность на промисах, Promise, all, then, catch, race](https://youtu.be/RMl4r6s1Y8M) + +## [Типизированные массивы в JavaScript](https://youtu.be/tTNcqxbxhfY) + +## [Шаблон Singleton (синглтон) в JavaScript](https://youtu.be/qdJ5yikZnfE) + +- [00:00:00 Singleton через конструктор прототипа](https://youtu.be/qdJ5yikZnfE?t=0) +- [00:03:27 Singleton через замыкания ](https://youtu.be/qdJ5yikZnfE?t=207) +- [00:06:10 Пример singleton через замыкания ](https://youtu.be/qdJ5yikZnfE?t=370) +- [00:08:15 Пример singleton через замыкания в функциональном стиле ](https://youtu.be/qdJ5yikZnfE?t=495) +- [00:09:23 Пример singleton через замыкания в функциональном стиле (упрощенный) ](https://youtu.be/qdJ5yikZnfE?t=563) +- [00:10:32 Создание singleton в JS](https://youtu.be/qdJ5yikZnfE?t=632) + +## [Функциональные объекты, функторы и монады в JavaScript](https://youtu.be/3Z7f0Gi8pxw) + +- [00:00:00 Определение функтора ](https://youtu.be/3Z7f0Gi8pxw?t=0) +- [00:01:40 Функтор из прототипа ](https://youtu.be/3Z7f0Gi8pxw?t=100) +- [00:08:17 Функтор из прототипа (упрощенный) ](https://youtu.be/3Z7f0Gi8pxw?t=497) +- [00:09:14 Функтор из замыкания ](https://youtu.be/3Z7f0Gi8pxw?t=554) +- [00:11:49 Функтор из замыкания с тернарным оператором](https://youtu.be/3Z7f0Gi8pxw?t=709) +- [00:12:44 Аппликативный функтор из прототипа ](https://youtu.be/3Z7f0Gi8pxw?t=764) +- [00:18:08 Аппликативный функтор из замыкания (монада)](https://youtu.be/3Z7f0Gi8pxw?t=1088) +- [00:23:11 Пример применения монады ](https://youtu.be/3Z7f0Gi8pxw?t=1391) +- [00:28:37 Функциональный объект ](https://youtu.be/3Z7f0Gi8pxw?t=1717) +- [00:39:44 Пример применения функционального объекта](https://youtu.be/3Z7f0Gi8pxw?t=2384) +- [00:45:27 Обобщение](https://youtu.be/3Z7f0Gi8pxw?t=2727) + +## [Асинхронные функции, async/await, thenable, обработка ошибок](https://youtu.be/Jdf_tZuJbHI) + +## [Асинхронные адаптеры: promisify, callbackify, asyncify...](https://youtu.be/76k6_YkYRmU) + +## [Асинхронные коллекторы данных](https://youtu.be/tgodt1JL6II) + +## [Утечки памяти в Node.js и JavaScript, сборка мусора и профилирование](https://youtu.be/0oZa64SB2wM) + +## [Рекурсия: косвенная и хвостовая, стек, выход](https://youtu.be/W2skCjIgVKE) + +- [00:00 Рекурсивная функция для вычисления глубины стека](https://youtu.be/W2skCjIgVKE?t=0) +- [03:25 Неявная рекурсия](https://youtu.be/W2skCjIgVKE?t=205) +- [04:52 Рекурсивная функция для вычисления степени числа](https://youtu.be/W2skCjIgVKE?t=292) +- [06:12 Рекурсивная функция для вычисления факториала ](https://youtu.be/W2skCjIgVKE?t=372) +- [06:29 Рекурсивная функция для вычисления числа Фибоначчи ](https://youtu.be/W2skCjIgVKE?t=389) +- [09:27 Рекурсивная функция, как аналог функции reduce ](https://youtu.be/W2skCjIgVKE?t=567) +- [12:04 Оптимизация хвостовой рекурсии ](https://youtu.be/W2skCjIgVKE?t=724) +- [15:41 Оптимизация обычной рекурсивной функции](https://youtu.be/W2skCjIgVKE?t=941) + +## [Дженерики и обобщенное программирование](https://youtu.be/r6W2z3DQhoI) + +## [Генераторы и асинхронные генераторы в JavaScript](https://youtu.be/kvNm9D32s8s) + +- [00:00 Способы объявления генераторов ](https://youtu.be/kvNm9D32s8s?t=0) +- [10:41 Пример генератора с yield ](https://youtu.be/kvNm9D32s8s?t=641) +- [15:54 Пример генератора с yield и return ](https://youtu.be/kvNm9D32s8s?t=954) +- [18:47 Получение значений из генератора циклом for...of ](https://youtu.be/kvNm9D32s8s?t=1127) +- [21:04 Получение значений из генератора spead - оператором ](https://youtu.be/kvNm9D32s8s?t=1264) +- [21:50 Метод next ](https://youtu.be/kvNm9D32s8s?t=1310) +- [23:30 Пример генератора с yield * возвращающего итерируемые объекты ](https://youtu.be/kvNm9D32s8s?t=1410) +- [25:05 Пример генератора с yield * возвращающего другие генераторы ](https://youtu.be/kvNm9D32s8s?t=1505) +- [26:18 Метод return ](https://youtu.be/kvNm9D32s8s?t=1578) +- [28:11 Метод throw](https://youtu.be/kvNm9D32s8s?t=1691) +- [29:05 Обобщение](https://youtu.be/kvNm9D32s8s?t=1745) + +## [Итераторы и асинхронные итераторы в JavaScript](https://youtu.be/rBGFlWpVpGs) + +## [Фасад - петтерн для скрытия сложности](https://youtu.be/oJtBO7CystE) + +## [Адаптер (Adapter) - паттерн достижения совместимости](https://youtu.be/cA65McLQrR8) + +- [0:00 введение](https://youtu.be/cA65McLQrR8?t=0) +- [1:30 adapter на prototype](https://youtu.be/cA65McLQrR8?t=90) +- [3:57 adapter на class](https://youtu.be/cA65McLQrR8?t=237) +- [4:23 adapter на function](https://youtu.be/cA65McLQrR8?t=263) +- [6:15 adapter на классе-обертке (boxing)](https://youtu.be/cA65McLQrR8?t=375) +- [7:08 adapter на замыканиях (closure)](https://youtu.be/cA65McLQrR8?t=428) +- [8:10 adapter на interface](https://youtu.be/cA65McLQrR8?t=490) +- [13:45 adapter на events](https://youtu.be/cA65McLQrR8?t=825) +- [16:00 выводы](https://youtu.be/cA65McLQrR8?t=960) + +## [Стратегия (Strategy) - выбор взаимозаменяемого поведения](https://youtu.be/hO8VSVv0NqM) + +- [0:00 введение](https://youtu.be/hO8VSVv0NqM?t=0) +- [3:40 strategy на class](https://youtu.be/hO8VSVv0NqM?t=220) +- [15:04 strategy на prototype](https://youtu.be/hO8VSVv0NqM?t=904) +- [16:14 strategy на function](https://youtu.be/hO8VSVv0NqM?t=974) +- [20:22 strategy с примером работы над массивом](https://youtu.be/hO8VSVv0NqM?t=1222) +- [24:07 обобщение](https://youtu.be/hO8VSVv0NqM?t=1447) + +## [Линзы в JavaScript - функциональные аналоги геттера и сеттера](https://youtu.be/IBF5gFU6G-o) + +## [Перечислимый тип (enum) в JavaScript и TypeScript](https://youtu.be/BXiKebOIAGI) + +## [Графы и запросы к графовым структурам на JavaScript](https://youtu.be/a0W0T8Yqw3s) + +## [Паттерн Команда (Command) действие и параметры как объект](https://youtu.be/vER0vYL4hM4) + +## [Тестирование: юниттесты с примерами на JavaScript](https://youtu.be/CszugIag2TA) + +## [Инверсия управления и внедрение зависимостей в Node.js](https://youtu.be/Fz86Fdjz-LM) + +## [Слои, связанность и связность кода в JavaScript](https://youtu.be/A3RpwNlVeyY) + +## [Измерение производительности кода и оптимизация в JavaScript и Node.js](https://youtu.be/sanq2X7Re8o) + +- [00:00:00 Введение ](https://youtu.be/sanq2X7Re8o?t=0) +- [00:05:27 Console.time и console.timeEnd ](https://youtu.be/sanq2X7Re8o?t=327) +- [00:09:05 New Date( ).getTime( ) ](https://youtu.be/sanq2X7Re8o?t=545) +- [00:11:15 Process.hrtime( )](https://youtu.be/sanq2X7Re8o?t=675) +- [00:18:51 Process.hrtime.bigint( ) и движок для benchmark](https://youtu.be/sanq2X7Re8o?t=1131) +- [00:27:00 Сравнение функций инстанцирования ](https://youtu.be/sanq2X7Re8o?t=1620) +- [00:31:06 Алгоритм для сравнения ](https://youtu.be/sanq2X7Re8o?t=1866) +- [00:39:36 Работа движка benchmark ](https://youtu.be/sanq2X7Re8o?t=2376) +- [00:41:37 Результаты теста](https://youtu.be/sanq2X7Re8o?t=2497) +- [00:47:33 Сравнение массива и объектов ](https://youtu.be/sanq2X7Re8o?t=2853) +- [00:54:21 Результаты теста ](https://youtu.be/sanq2X7Re8o?t=3261) +- [00:55:00 Сравнение 3 функций range ](https://youtu.be/sanq2X7Re8o?t=3300) +- [00:56:34 Результаты теста ](https://youtu.be/sanq2X7Re8o?t=3394) +- [00:58:50 Сравнение функций по способу вызова](https://youtu.be/sanq2X7Re8o?t=3530) +- [00:59:56 Результаты теста](https://youtu.be/sanq2X7Re8o?t=3596) +- [01:01:34 Сравнение indexOf и includes](https://youtu.be/sanq2X7Re8o?t=3694) +- [01:01:54 Результаты теста ](https://youtu.be/sanq2X7Re8o?t=3714) +- [01:03:23 Сравнение объявления переменной до и после цикла ](https://youtu.be/sanq2X7Re8o?t=3803) +- [01:05:02 Сравнение for keys, for (...in...) и for (...of...)](https://youtu.be/sanq2X7Re8o?t=3902) +- [01:05:34 Результаты теста ](https://youtu.be/sanq2X7Re8o?t=3934) +- [01:05:58 Сравнение шаблонных строк](https://youtu.be/sanq2X7Re8o?t=3958) +- [01:06:12 Сравнение хождения цикла по функции map в ES6](https://youtu.be/sanq2X7Re8o?t=3972) +- [01:07:18 Результаты теста ](https://youtu.be/sanq2X7Re8o?t=4038) +- [01:07:56 Сравнение repeat и arrayJoin ](https://youtu.be/sanq2X7Re8o?t=4076) +- [01:08:15 Результаты теста](https://youtu.be/sanq2X7Re8o?t=4095) +- [01:08:26 Сравнение дублирования массива ](https://youtu.be/sanq2X7Re8o?t=4106) +- [01:08:58 Результаты теста](https://youtu.be/sanq2X7Re8o?t=4138) +- [01:09:43 Сравнение копирование набора данных ](https://youtu.be/sanq2X7Re8o?t=4183) +- [01:10:26 Результаты теста ](https://youtu.be/sanq2X7Re8o?t=4226) +- [01:10:47 Сравнение итерирования с помощью forEarch и for (...of...)](https://youtu.be/sanq2X7Re8o?t=4247) +- [01:11:08 Результаты теста](https://youtu.be/sanq2X7Re8o?t=4268) +- [01:11:31 Обобщение](https://youtu.be/sanq2X7Re8o?t=4291) + +## [Слой доступа к данным, курсор, транзакция](https://youtu.be/CRcSWtWVvrA) + +## [HTTP запросы в браузере и Node.js: XMLHttpRequest, fetch](https://youtu.be/wMMki2FEYGY) + +## [Метапрограммирование с примерами на JavaScript](https://youtu.be/Ed9onRv4G5Y) + +## [Тестирование: системное и интеграционное тестирование на JavaScript](https://youtu.be/OuKu_6H_6gE) + +## [Отмена асинхронных операций, cancellable callback and Promise в JavaScript](https://youtu.be/T8fXlnqI4Ws) + +## [Асинхронная композиция функций на JavaScript](https://youtu.be/3ZCrMlMpOrM) + +## [Thenable и легковесный await в JavaScript](https://youtu.be/DXp__1VNIvI) + +## [Конкурентная асинхронная очередь на JavaScript](https://youtu.be/Lg46AH8wFvg) + +## [Паттерн Revealing Constructor - открытый конструктор](https://youtu.be/leR5sXRkuJI) + +## [Модель акторов для параллельных вычислений](https://youtu.be/xp5MVKEqxY4) + +## [Have Objects Failed? Или что не так с ООП?](https://youtu.be/4yO5OS0vPSw) + +- [1:46 Присвоенные идеи ООП](https://youtu.be/4yO5OS0vPSw?t=106) +- [11:47 Притянутые достоинства ООП](https://youtu.be/4yO5OS0vPSw?t=707) +- [22:06 Проблемы ООП](https://youtu.be/4yO5OS0vPSw?t=1326) +- [39:56 Как жить с ООП](https://youtu.be/4yO5OS0vPSw?t=2396) +- [56:44 Подходящие области для ООП](https://youtu.be/4yO5OS0vPSw?t=3404) +- [1:03:51 Неподходящие области для ООП](https://youtu.be/4yO5OS0vPSw?t=3831) +- [1:11:30 Заключение](https://youtu.be/4yO5OS0vPSw?t=4290) + +## [Интроспекция и рефлексия в JavaScript](https://youtu.be/yvW1PjUVeM0) + +## [История развития языков программирования](https://youtu.be/qqz0VSaNxuw) + +- [0:00:02 введение](https://youtu.be/qqz0VSaNxuw?t=2) +- [0:00:57 карты для механических машин](https://youtu.be/qqz0VSaNxuw?t=57) +- [0:01:50 карты для электронных машин](https://youtu.be/qqz0VSaNxuw?t=110) +- [0:03:21 машинный код](https://youtu.be/qqz0VSaNxuw?t=201) +- [0:04:05 Assembly language](https://youtu.be/qqz0VSaNxuw?t=245) +- [0:06:14 Fortran](https://youtu.be/qqz0VSaNxuw?t=374) +- [0:07:28 Basic](https://youtu.be/qqz0VSaNxuw?t=448) +- [0:09:19 LISP](https://youtu.be/qqz0VSaNxuw?t=559) +- [0:12:23 Algol 60](https://youtu.be/qqz0VSaNxuw?t=743) +- [0:13:25 C](https://youtu.be/qqz0VSaNxuw?t=805) +- [0:14:23 C++](https://youtu.be/qqz0VSaNxuw?t=863) +- [0:15:13 Ada](https://youtu.be/qqz0VSaNxuw?t=913) +- [0:16:08 dBase, FoxBase, Clipper](https://youtu.be/qqz0VSaNxuw?t=968) +- [0:19:56 Haskell](https://youtu.be/qqz0VSaNxuw?t=1196) +- [0:21:23 Python](https://youtu.be/qqz0VSaNxuw?t=1283) +- [0:23:37 Java](https://youtu.be/qqz0VSaNxuw?t=1417) +- [0:25:45 Delphi](https://youtu.be/qqz0VSaNxuw?t=1545) +- [0:28:43 SQL](https://youtu.be/qqz0VSaNxuw?t=1723) +- [0:30:43 PHP 0:41:17 стрелочку из плюсов взяли](https://youtu.be/qqz0VSaNxuw?t=1843) +- [0:33:14 C#](https://youtu.be/qqz0VSaNxuw?t=1994) +- [0:35:20 Go](https://youtu.be/qqz0VSaNxuw?t=2120) +- [0:36:17 Rust](https://youtu.be/qqz0VSaNxuw?t=2177) +- [0:37:30 TypeScript](https://youtu.be/qqz0VSaNxuw?t=2250) +- [0:39:59 Swift](https://youtu.be/qqz0VSaNxuw?t=2399) +- [0:40:19 Kotlin](https://youtu.be/qqz0VSaNxuw?t=2419) +- [0:42:20 взаимовлияние языков](https://youtu.be/qqz0VSaNxuw?t=2540) +- [0:44:23 все ли языки используются сегодня](https://youtu.be/qqz0VSaNxuw?t=2663) +- [0:49:35 производительность языков](https://youtu.be/qqz0VSaNxuw?t=2975) +- [0:54:34 опциональная аннотация типов](https://youtu.be/qqz0VSaNxuw?t=3274) +- [0:56:50 прогревание кода](https://youtu.be/qqz0VSaNxuw?t=3410) +- [0:59:24 первые операционные системы](https://youtu.be/qqz0VSaNxuw?t=3564) +- [1:00:44 ограничение по вложенности рекурсии](https://youtu.be/qqz0VSaNxuw?t=3644) +- [1:02:53 абстрактное синтаксическое дерево](https://youtu.be/qqz0VSaNxuw?t=3773) +- [1:04:52 машинный код и байт-код](https://youtu.be/qqz0VSaNxuw?t=3892) +- [1:07:26 typescript быстрее javascript?](https://youtu.be/qqz0VSaNxuw?t=4046) +- [1:11:45 goroutine на Go асинхронная?](https://youtu.be/qqz0VSaNxuw?t=4305) +- [1:12:58 асинхронная функция в javascript](https://youtu.be/qqz0VSaNxuw?t=4378) +- [1:15:23 строгая типизация влияет на скорость?](https://youtu.be/qqz0VSaNxuw?t=4523) +- [1:16:13 выведение и проверка типов в IDE](https://youtu.be/qqz0VSaNxuw?t=4573) + +## [Парадигмы программирования (обзор)](https://youtu.be/Yk1sxLVHfjs) + +- [00:20 парадигма](https://youtu.be/Yk1sxLVHfjs?t=20) +- [02:19 императивная программа: пошаговое исполнение на примере JavaScript](https://youtu.be/Yk1sxLVHfjs?t=139) +- [03:22 пошаговое исполнение характерно для неструктурных ЯП: Assembly language, Basic](https://youtu.be/Yk1sxLVHfjs?t=202) +- [05:08 структурная программа на Rust](https://youtu.be/Yk1sxLVHfjs?t=308) +- [06:21 процедурный стиль на Python](https://youtu.be/Yk1sxLVHfjs?t=381) +- [07:28 объектно-ориентированное программирование на примере JavaScript](https://youtu.be/Yk1sxLVHfjs?t=448) +- [09:32 ООП хорош не для всякой задачи -- пример с пирожком](https://youtu.be/Yk1sxLVHfjs?t=572) +- [13:28 прототипное программирование](https://youtu.be/Yk1sxLVHfjs?t=808) +- [16:51 функциональное программирование](https://youtu.be/Yk1sxLVHfjs?t=1011) +- [18:58 асинхронное программирование](https://youtu.be/Yk1sxLVHfjs?t=1138) +- [22:48 реактивное программирование](https://youtu.be/Yk1sxLVHfjs?t=1368) +- [26:04 событийно-ориентированное программирование (управляется потоками событий)](https://youtu.be/Yk1sxLVHfjs?t=1564) +- [27:03 метапрограммирование](https://youtu.be/Yk1sxLVHfjs?t=1623) +- [28:58 мультипарадигменное программирование](https://youtu.be/Yk1sxLVHfjs?t=1738) +- [30:52 параллельное программирование](https://youtu.be/Yk1sxLVHfjs?t=1852) +- [31:58 реактивность](https://youtu.be/Yk1sxLVHfjs?t=1918) +- [33:29 функции 1 класса](https://youtu.be/Yk1sxLVHfjs?t=2009) +- [34:55 геттеры и сеттеры](https://youtu.be/Yk1sxLVHfjs?t=2095) +- [37:37 смешивание стилей](https://youtu.be/Yk1sxLVHfjs?t=2257) +- [38:07 если хочется писать в чистом ООП](https://youtu.be/Yk1sxLVHfjs?t=2287) +- [39:43 объект, класс, коллекция -- разница](https://youtu.be/Yk1sxLVHfjs?t=2383) +- [47:27 где хранятся классы](https://youtu.be/Yk1sxLVHfjs?t=2847) +- [47:54 у каждой парадигмы свои шаблоны программирования](https://youtu.be/Yk1sxLVHfjs?t=2874) +- [48:52 когда используется функциональное программирование](https://youtu.be/Yk1sxLVHfjs?t=2932) + +## [Примеси, обертки, декораторы, мемоизация](https://youtu.be/2h9syXN5wO0) + +- [00:00:00 Синхронная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=0) +- [00:02:55 Синхронная универсальная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=175) +- [00:08:28 Асинхронная универсальная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=508) +- [00:15:50 Синхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/2h9syXN5wO0?t=950) +- [00:22:45 Асинхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/2h9syXN5wO0?t=1365) +- [00:25:38 Функция-обертка, которая ограничивает вызов функции до одного вызова (once) ](https://youtu.be/2h9syXN5wO0?t=1538) +- [00:27:36 Функция-обертка, которая ограничивает вызов функции до n-го вызова (limit)](https://youtu.be/2h9syXN5wO0?t=1656) +- [00:29:50 Функция-обертка, которая отменяет вызов функции (cancel)](https://youtu.be/2h9syXN5wO0?t=1790) +- [00:32:29 Функция-обертка с методами timeout, limit, cancel](https://youtu.be/2h9syXN5wO0?t=1949) +- [00:39:03 Функция-обертка с методами timeout, limit, cancel (оптимизированная)](https://youtu.be/2h9syXN5wO0?t=2343) +- [00:42:28 Функция-обертка, которая ограничивает один вызов за 200 мс (throttle)](https://youtu.be/2h9syXN5wO0?t=2548) +- [00:45:47 Примесь поля через точку ](https://youtu.be/2h9syXN5wO0?t=2747) +- [00:51:35 Примесь поля через функцию extend](https://youtu.be/2h9syXN5wO0?t=3095) +- [00:57:35 Примесь поля через object.assign( )](https://youtu.be/2h9syXN5wO0?t=3455) +- [00:59:18 Примесь поведения ](https://youtu.be/2h9syXN5wO0?t=3558) +- [01:02:23 Примесь изменения класса](https://youtu.be/2h9syXN5wO0?t=3743) +- [01:06:50 Определение](https://youtu.be/2h9syXN5wO0?t=4010) +- [01:07:30 Реализация простой мемоизации ](https://youtu.be/2h9syXN5wO0?t=4050) +- [01:14:43 Реализация простой мемоизации с проверкой скорости ](https://youtu.be/2h9syXN5wO0?t=4483) +- [01:20:43 Удаление накопленного кэша ](https://youtu.be/2h9syXN5wO0?t=4843) +- [01:25:35 Асинхронная мемоизация ](https://youtu.be/2h9syXN5wO0?t=5135) +- [01:31:10 Преобразование аргументов и ключей в hash-функцию](https://youtu.be/2h9syXN5wO0?t=5470) +- [01:33:32 Реализация сложной мемоизации](https://youtu.be/2h9syXN5wO0?t=5612) + +## [Ответы на вопросы по курсу "Основы программирования" 2019-2020](https://youtu.be/TY6nDW7aYys) + +## [Антипаттерны процедурного программирования](https://youtu.be/cTv7V22mkwE) + +## [Семинар: выполнение лабораторных работ на JavaSript по курсу "Основы программирования"](https://youtu.be/ikUOyFPzdJw) + +## [Массивы в JavaScript (методы Array)](https://youtu.be/D1kfYBkX9FE) + +- [00:00 Конструкция массива](https://youtu.be/D1kfYBkX9FE?t=0) +- [09:58 Метод concat](https://youtu.be/D1kfYBkX9FE?t=598) +- [11:00 Методы every и some ](https://youtu.be/D1kfYBkX9FE?t=660) +- [13:00 Метод filter ](https://youtu.be/D1kfYBkX9FE?t=780) +- [13:29 Методы find и findIndex](https://youtu.be/D1kfYBkX9FE?t=809) +- [14:30 Метод flat ](https://youtu.be/D1kfYBkX9FE?t=870) +- [17:08 Метод includes ](https://youtu.be/D1kfYBkX9FE?t=1028) +- [17:32 Метод indexOf и lastIndexOf](https://youtu.be/D1kfYBkX9FE?t=1052) +- [18:35 Метод join](https://youtu.be/D1kfYBkX9FE?t=1115) +- [18:58 Метод reverse](https://youtu.be/D1kfYBkX9FE?t=1138) +- [19:29 Метод slice](https://youtu.be/D1kfYBkX9FE?t=1169) +- [21:49 Метод splice](https://youtu.be/D1kfYBkX9FE?t=1309) +- [23:27 Методы reduce и reduceRight](https://youtu.be/D1kfYBkX9FE?t=1407) + +## [Code Review: как это и зачем](https://youtu.be/EKL6NiIQ6ZU) + +## [Семинар: Code Review, ответы на вопросы](https://youtu.be/AgH4OAKbmkM) + +## [Мономорфный и полиморфный код, инлайн-кэш, скрытые классы в JavaScript](https://youtu.be/9JUY3prnCQ4) + +## [Ассоциация, агрегация и композиция объектов в JavaScript](https://youtu.be/tOIcBrzezK0) + +## [Рефакторинг: причины, цели, техники и процесс](https://youtu.be/z73wmpdweQ4) + +## [Принцип подстановки Барбары Лисков](https://youtu.be/RbhYxygxroc) + +## [Композиция функций (pipe, compose) в JavaScript](https://youtu.be/xS9FicVrOTI) + +## [Примеси в JavaScript: mixin, extend, Object.assign, class λ-mixin](https://youtu.be/NZMrJ2adEyY) + +## [Прототипное программирование и прототипное наследование в JavaScript](https://youtu.be/SzaXTW2qcJE) + +## [Мемоизация функций: memoize в JavaScript](https://youtu.be/H6S8QJo2Qxg) + +## [Функции-обертки: Wrappers в JavaScript](https://youtu.be/En7pWi2fSzs) + +## [Новое в JavaScript: ES.Next, ECMAScript 2020, ES11, ES10, ES9, ES8, ES7, ES6, ES2020, ES2019](https://youtu.be/fUjHLj8bq_Y) + +- [00:00 ECMA Script versions](https://youtu.be/fUjHLj8bq_Y?t=0) +- [09:40 Array.proptotype.includes ](https://youtu.be/fUjHLj8bq_Y?t=580) +- [10:55 Array.proptotype.flat ](https://youtu.be/fUjHLj8bq_Y?t=655) +- [11:36 Array.proptotype.flatMap](https://youtu.be/fUjHLj8bq_Y?t=696) +- [12:20 Array.proptotype.sort](https://youtu.be/fUjHLj8bq_Y?t=740) +- [14:24 Object.values ](https://youtu.be/fUjHLj8bq_Y?t=864) +- [15:06 Object.keys ](https://youtu.be/fUjHLj8bq_Y?t=906) +- [15:15 Object.entries ](https://youtu.be/fUjHLj8bq_Y?t=915) +- [15:49 Object.fromEntries ](https://youtu.be/fUjHLj8bq_Y?t=949) +- [16:36 String.proptotype.padStart / String.proptotype.padEnd ](https://youtu.be/fUjHLj8bq_Y?t=996) +- [17:02 String.proptotype.trimStart / String.proptotype.trimEnd](https://youtu.be/fUjHLj8bq_Y?t=1022) +- [17:18 Operator rest ](https://youtu.be/fUjHLj8bq_Y?t=1038) +- [19:38 Operator spread](https://youtu.be/fUjHLj8bq_Y?t=1178) +- [21:34 Operator exponentiation x ** y](https://youtu.be/fUjHLj8bq_Y?t=1294) +- [22:35 Operator optional chaining ?.](https://youtu.be/fUjHLj8bq_Y?t=1355) +- [24:22 Asynchronous function: async / await ](https://youtu.be/fUjHLj8bq_Y?t=1462) +- [26:34 Trailing Commas ](https://youtu.be/fUjHLj8bq_Y?t=1594) +- [28:00 Asynchronous iterable contract: for-await](https://youtu.be/fUjHLj8bq_Y?t=1680) +- [29:51 Try...catch ](https://youtu.be/fUjHLj8bq_Y?t=1791) +- [30:21 Function.prototype.toString ](https://youtu.be/fUjHLj8bq_Y?t=1821) +- [30:58 Symbol.prototype.description ](https://youtu.be/fUjHLj8bq_Y?t=1858) +- [32:11 Promise.finaly ](https://youtu.be/fUjHLj8bq_Y?t=1931) +- [33:22 Promise.allSettled ](https://youtu.be/fUjHLj8bq_Y?t=2002) +- [36:18 More features](https://youtu.be/fUjHLj8bq_Y?t=2178) + +## [Вступительная лекция по инженерии программного обеспечения (КПИ 1 курс) 2021-09-01](https://youtu.be/vWi6KyG078g) + +## [Автоматное программирование c примерами на JavaScript](https://youtu.be/mxz7_zcip0c) + +## [Контрактное программирование с примерами на JavaScript и Node.js](https://youtu.be/K5_kSUvbGEQ) + +## [JavaScript - Практические задачи #1: Пример исправления, лайвкодинг, оптимизация и рефакторинг](https://youtu.be/CRmjViLEE9E) + +## [JavaScript и Node.js: Добавь в Github личную карту знаний](https://youtu.be/gDUGZsw2N2g) From 459a85fcda0588dd03542be51f8a4ef63c787dea Mon Sep 17 00:00:00 2001 From: Anton Telichenko Date: Wed, 3 Aug 2022 21:51:19 +0300 Subject: [PATCH 004/217] Update Asynchronous.md (#72) Co-authored-by: Timur Shemsedinov --- Courses/Asynchronous.md | 122 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) diff --git a/Courses/Asynchronous.md b/Courses/Asynchronous.md index 29268ff..951b3d8 100644 --- a/Courses/Asynchronous.md +++ b/Courses/Asynchronous.md @@ -60,3 +60,125 @@ - Async hooks - [Разделяемая память в многопоточном Node.js](https://youtu.be/KNsm_iIQt7U) - [Асинхронный пул для worker thread pool в Node.js](https://youtu.be/Jj5KZRq4wYI) + +# Асинхронное программирование (таймкоды) + +## [Асинхронное программирование в Node.js и JavaScript](https://youtu.be/hY6Z6qNYzmc) + +- [5:45 Callbacks](https://youtu.be/hY6Z6qNYzmc?t=345) +- [10:00 Async.js or analogues](https://youtu.be/hY6Z6qNYzmc?t=600) +- [15:47 Events](https://youtu.be/hY6Z6qNYzmc?t=947) +- [18:00 Promise](https://youtu.be/hY6Z6qNYzmc?t=1080) +- [25:20 async/await](https://youtu.be/hY6Z6qNYzmc?t=1520) +- [27:10 Functor + Chaining + composition](https://youtu.be/hY6Z6qNYzmc?t=1630) +- [30:49 Problems of callback, async.js, Proimise, async/await](https://youtu.be/hY6Z6qNYzmc?t=1849) +- [34:00 Add timeout to any function](https://youtu.be/hY6Z6qNYzmc?t=2040) +- [36:55 Make function cancelable](https://youtu.be/hY6Z6qNYzmc?t=2215) +- [37:59 More wrappers](https://youtu.be/hY6Z6qNYzmc?t=2279) +- [39:22 Promisify and Callbackify](https://youtu.be/hY6Z6qNYzmc?t=2362) +- [48:47 Sync function to async](https://youtu.be/hY6Z6qNYzmc?t=2927) +- [41:43 Sync function to Promise](https://youtu.be/hY6Z6qNYzmc?t=2503) +- [43:17 Convertors](https://youtu.be/hY6Z6qNYzmc?t=2597) +- [43:31 Metasync](https://youtu.be/hY6Z6qNYzmc?t=2611) +- [45:26 Function composition](https://youtu.be/hY6Z6qNYzmc?t=2726) +- [47:09 Asynchronous function composition](https://youtu.be/hY6Z6qNYzmc?t=2829) +- [47:58 Flow communication like in electronics](https://youtu.be/hY6Z6qNYzmc?t=2878) +- [50:06 Collectors](https://youtu.be/hY6Z6qNYzmc?t=3006) +- [59:17 Queue](https://youtu.be/hY6Z6qNYzmc?t=3557) + +## [Таймеры, таймауты, EventEmitter в JavaScript и Node.js](https://youtu.be/LK2jveAnRNg) + +- [0:30 callback sync/async](https://youtu.be/LK2jveAnRNg?t=30) +- [1:35 временная задержка sleep.js](https://youtu.be/LK2jveAnRNg?t=95) +- [5:35 await-sleep.js](https://youtu.be/LK2jveAnRNg?t=335) +- [8:40 sleep-then.js](https://youtu.be/LK2jveAnRNg?t=520) +- [9:30 order.js](https://youtu.be/LK2jveAnRNg?t=570) +- [18:38 precision.js](https://youtu.be/LK2jveAnRNg?t=1118) +- [22:13 blocking.js](https://youtu.be/LK2jveAnRNg?t=1333) +- [22:50 timers.js](https://youtu.be/LK2jveAnRNg?t=1370) +- [29:35 ref-unref.js](https://youtu.be/LK2jveAnRNg?t=1775) +- [32:05 enroll.js](https://youtu.be/LK2jveAnRNg?t=1925) +- [34:57 eventloop.txt](https://youtu.be/LK2jveAnRNg?t=2097) +- [37:37 eventEmitter](https://youtu.be/LK2jveAnRNg?t=2257) +- [44:32 simple.js](https://youtu.be/LK2jveAnRNg?t=2672) +- [47:48 usage.js](https://youtu.be/LK2jveAnRNg?t=2868) +- [48:30 enhanced.js](https://youtu.be/LK2jveAnRNg?t=2910) +- [50:18 star-fix.js](https://youtu.be/LK2jveAnRNg?t=3018) +- [51:10 usage.js](https://youtu.be/LK2jveAnRNg?t=3070) +- [53:15 closure.js](https://youtu.be/LK2jveAnRNg?t=3195) +- [54:50 fp.js](https://youtu.be/LK2jveAnRNg?t=3290) +- [57:10 methods.js](https://youtu.be/LK2jveAnRNg?t=3430) +- [1:06:35 min.js](https://youtu.be/LK2jveAnRNg?t=3995) +- [1:12:31 prod.js](https://youtu.be/LK2jveAnRNg?t=4351) + +## [Асинхронное программирование на callback`ах в JavaScript](https://youtu.be/z8Hg6zgi3yQ) + +- [1:20 пример callback функции](https://youtu.be/z8Hg6zgi3yQ?t=80) +- [2:40 пример последовательного исполнения callback функций](https://youtu.be/z8Hg6zgi3yQ?t=160) +- [5:52 пример параллельного исполнения async функций c использованием wrapAsync](https://youtu.be/z8Hg6zgi3yQ?t=352) +- [15:18 пример последовательного исполнения async функций c использованием wrapAsync](https://youtu.be/z8Hg6zgi3yQ?t=918) +- [19:05 chain исполнение async функций](https://youtu.be/z8Hg6zgi3yQ?t=1145) +- [41:16 где можно встретить асинхронные функции](https://youtu.be/z8Hg6zgi3yQ?t=2476) + +## [Неблокирующее асинхронное итерирование в JavaScript](https://youtu.be/wYA2cIRYLoA) + +- [1:02 блокирующее итерирование по массиву](https://youtu.be/wYA2cIRYLoA?t=62) +- [3:24 блокирующее итерирование с помощью for await](https://youtu.be/wYA2cIRYLoA?t=204) +- [4:47 неблокирующее итерирование с помощью setTimeout](https://youtu.be/wYA2cIRYLoA?t=287) +- [6:45 неблокирующее итерирование с помощью for await](https://youtu.be/wYA2cIRYLoA?t=405) +- [8:20 неблокирующее итерирование без задержки](https://youtu.be/wYA2cIRYLoA?t=500) +- [13:00 неблокирующее итерирование без задержки с помощью for await](https://youtu.be/wYA2cIRYLoA?t=780) +- [19:30 использование асинхронного итерирования для обычных массивов](https://youtu.be/wYA2cIRYLoA?t=1170) + +## [Асинхронность с библиотекой async.js](https://youtu.be/XQ94wQc-erU) + +## [Асинхронность на промисах, Promise, all, then, catch, race](https://youtu.be/RMl4r6s1Y8M) + +## [Асинхронные функции, async/await, thenable, обработка ошибок](https://youtu.be/Jdf_tZuJbHI) + +## [Асинхронные адаптеры: promisify, callbackify, asyncify...](https://youtu.be/76k6_YkYRmU) + +## [Асинхронные коллекторы данных](https://youtu.be/tgodt1JL6II) + +## [Необработанные ошибки в промисах на Node.js](https://youtu.be/1Ml5NE2fsZ8) + +## [Проблема асинхронного стектрейса в JavaScript и Node.js](https://youtu.be/pfiHTx3j87Y) + +## [Генераторы и асинхронные генераторы в JavaScript](https://youtu.be/kvNm9D32s8s) + +- [00:00 Способы объявления генераторов ](https://youtu.be/kvNm9D32s8s?t=0) +- [10:41 Пример генератора с yield ](https://youtu.be/kvNm9D32s8s?t=641) +- [15:54 Пример генератора с yield и return ](https://youtu.be/kvNm9D32s8s?t=954) +- [18:47 Получение значений из генератора циклом for...of ](https://youtu.be/kvNm9D32s8s?t=1127) +- [21:04 Получение значений из генератора spead - оператором ](https://youtu.be/kvNm9D32s8s?t=1264) +- [21:50 Метод next ](https://youtu.be/kvNm9D32s8s?t=1310) +- [23:30 Пример генератора с yield * возвращающего итерируемые объекты ](https://youtu.be/kvNm9D32s8s?t=1410) +- [25:05 Пример генератора с yield * возвращающего другие генераторы ](https://youtu.be/kvNm9D32s8s?t=1505) +- [26:18 Метод return ](https://youtu.be/kvNm9D32s8s?t=1578) +- [28:11 Метод throw](https://youtu.be/kvNm9D32s8s?t=1691) +- [29:05 Обобщение](https://youtu.be/kvNm9D32s8s?t=1745) + +## [Итераторы и асинхронные итераторы в JavaScript](https://youtu.be/rBGFlWpVpGs) + +## [Отмена асинхронных операций, cancellable callback and Promise в JavaScript](https://youtu.be/T8fXlnqI4Ws) + +## [Асинхронная композиция функций на JavaScript](https://youtu.be/3ZCrMlMpOrM) + +## [Thenable и легковесный await в JavaScript](https://youtu.be/DXp__1VNIvI) + +## [Конкурентная асинхронная очередь на JavaScript](https://youtu.be/Lg46AH8wFvg) + +## [Паттерн Revealing Constructor - открытый конструктор](https://youtu.be/leR5sXRkuJI) + +## [Future: Асинхронность на фьючерах без состояния](https://youtu.be/22ONv3AGXdk) + +## [Deferred: Асинхронность на диферах с состоянием](https://youtu.be/a2fVA1o-ovM) + +## [Модель акторов для параллельных вычислений](https://youtu.be/xp5MVKEqxY4) + +## [Паттерн Наблюдатель (Observer + Observable)](https://youtu.be/_bFXuLcXoXg) + +## [Асинхронность на RxJS и потоки событий](https://youtu.be/0kcpMAl-wfE) + +## [Асинхронный пул для worker thread pool в Node.js](https://youtu.be/Jj5KZRq4wYI) + From e8b5cdf54e6e001614aef1eeca28e0f7034aea93 Mon Sep 17 00:00:00 2001 From: Georgiy Filippov Date: Thu, 4 Aug 2022 06:51:01 +0500 Subject: [PATCH 005/217] fix: fix links in Async & Promise topics (#76) --- Courses/Fundamentals.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Courses/Fundamentals.md b/Courses/Fundamentals.md index 4bc6171..2d05836 100644 --- a/Courses/Fundamentals.md +++ b/Courses/Fundamentals.md @@ -148,8 +148,9 @@ - [Измерение производительности кода и оптимизация](https://youtu.be/sanq2X7Re8o) - Примеры кода: https://github.com/HowProgrammingWorks/Benchmark - [Асинхронное программирование на callback`ах](https://youtu.be/z8Hg6zgi3yQ) -- [Асинхронное программирование на promise`ах](https://youtu.be/RMl4r6s1Y8M) - Примеры кода: https://github.com/HowProgrammingWorks/AsynchronousProgramming +- [Асинхронное программирование на promise`ах](https://youtu.be/RMl4r6s1Y8M) + - Примеры кода: https://github.com/HowProgrammingWorks/Promise - [Асинхронные функции, async/await, thenable, обработка ошибок](https://youtu.be/Jdf_tZuJbHI) - Примеры кода: https://github.com/HowProgrammingWorks/AsyncAwait - Неизменяемые структуры данных (immutable) From f0b341289d2d7eb0c8395ccf840777e3b93a95fe Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 4 Aug 2022 15:06:33 +0300 Subject: [PATCH 006/217] Move timecodes for Node.js to separate file --- Courses/NodeJS-timecodes.md | 272 ++++++++++++++++++++++++++++++++++++ Courses/NodeJS.md | 272 ------------------------------------ 2 files changed, 272 insertions(+), 272 deletions(-) create mode 100644 Courses/NodeJS-timecodes.md diff --git a/Courses/NodeJS-timecodes.md b/Courses/NodeJS-timecodes.md new file mode 100644 index 0000000..35abd2d --- /dev/null +++ b/Courses/NodeJS-timecodes.md @@ -0,0 +1,272 @@ +# Таймкоды к курсу по Node.js + +Общее оглавление курса тут: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/NodeJS.md + +## [Node.js Введение в технологию](https://youtu.be/WBcHgaoHh1k) + +- [2:53 Основные идеи Node.js](https://youtu.be/WBcHgaoHh1k?t=173) +- [13:09 Приемущества/Недостатки JavaScript](https://youtu.be/WBcHgaoHh1k?t=789) +- [16:58 Что такое Node.js](https://youtu.be/WBcHgaoHh1k?t=1018) +- [20:52 Начало работы с Node.js](https://youtu.be/WBcHgaoHh1k?t=1252) +- [25:00 Встроенный API](https://youtu.be/WBcHgaoHh1k?t=1500) +- [33:55 Менеджер пакетов NPM](https://youtu.be/WBcHgaoHh1k?t=2035) +- [40:45 Структура проектов](https://youtu.be/WBcHgaoHh1k?t=2445) +- [44:35 Файлы package.json, package-lock.json](https://youtu.be/WBcHgaoHh1k?t=2675) +- [52:03 Репозиторий NPM](https://youtu.be/WBcHgaoHh1k?t=3123) +- [59:50 Однопоточность и многопоточность](https://youtu.be/WBcHgaoHh1k?t=3590) +- [1:05:30 Межпроцессовое взаимодействие](https://youtu.be/WBcHgaoHh1k?t=3930) +- [1:06:08 Асинхронный ввод/вывод](https://youtu.be/WBcHgaoHh1k?t=3968) +- [1:11:11 Производительность](https://youtu.be/WBcHgaoHh1k?t=4271) +- [1:13:02 Память](https://youtu.be/WBcHgaoHh1k?t=4382) +- [1:16:21 Отладка и профилирование](https://youtu.be/WBcHgaoHh1k?t=4581) +- [1:21:27 Ошибки](https://youtu.be/WBcHgaoHh1k?t=4887) +- [1:26:42 Обновление кода и перезапуск](https://youtu.be/WBcHgaoHh1k?t=5202) +- [1:28:43 Ассинхронное программирование](https://youtu.be/WBcHgaoHh1k?t=5323) +- [1:30:00 Примеры внедрения, интеракт. TV](https://youtu.be/WBcHgaoHh1k?t=5400) +- [1:31:00 Сферы применения Node.js](https://youtu.be/WBcHgaoHh1k?t=5460) +- [1:36:44 Полезные материалы](https://youtu.be/WBcHgaoHh1k?t=5804) + +## [Node.js в 2019 году (состояние и перспективы)](https://youtu.be/CUU49jjHloM) + +- [0:45 Node.js уже 10 лет](https://youtu.be/CUU49jjHloM?t=45) +- [5:39 Обзор новых возможностей Node.js](https://youtu.be/CUU49jjHloM?t=339) +- [18:14 Возможности для паралельного программирования на Node.js](https://youtu.be/CUU49jjHloM?t=1094) +- [20:08 Как работают thread и process в Node.js](https://youtu.be/CUU49jjHloM?t=1208) +- [20:47 Обзор последствий отсутствия изоляции в Node.js](https://youtu.be/CUU49jjHloM?t=1247) +- [20:33 Проблемы отсутствия изоляции в Node.js](https://youtu.be/CUU49jjHloM?t=1233) +- [38:27 Способы изоляции Node.js кода](https://youtu.be/CUU49jjHloM?t=2307) +- [48:24 Изоляция и кластеризации с threads в Node.js v12](https://youtu.be/CUU49jjHloM?t=2904) +- [56:59 Области применения Node.js: Локальные приложения](https://youtu.be/CUU49jjHloM?t=3419) +- [1:02:02 Области применения Node.js: Сервера](https://youtu.be/CUU49jjHloM?t=3722) +- [1:05:49 Области применения Node.js: Клиенты](https://youtu.be/CUU49jjHloM?t=3949) +- [1:08:58 Области применения Node.js: Hardware](https://youtu.be/CUU49jjHloM?t=4138) +- [1:09:28 Редкие области применения Node.js](https://youtu.be/CUU49jjHloM?t=4168) +- [1:11:55 Не подходящие области применения Node.js](https://youtu.be/CUU49jjHloM?t=4315) +- [1:13:53 Deno как экспементальная альтернатива Node.js](https://youtu.be/CUU49jjHloM?t=4433) +- [1:21:02 Обзор ссылок по теме](https://youtu.be/CUU49jjHloM?t=4862) +- [1:23:06 Ответы на вопросы](https://youtu.be/CUU49jjHloM?t=4986) + +## [Асинхронное программирование в Node.js и JavaScript](https://youtu.be/hY6Z6qNYzmc) + +- [5:45 Callbacks](https://youtu.be/hY6Z6qNYzmc?t=345) +- [10:00 Async.js or analogues](https://youtu.be/hY6Z6qNYzmc?t=600) +- [15:47 Events](https://youtu.be/hY6Z6qNYzmc?t=947) +- [18:00 Promise](https://youtu.be/hY6Z6qNYzmc?t=1080) +- [25:20 async/await](https://youtu.be/hY6Z6qNYzmc?t=1520) +- [27:10 Functor + Chaining + composition](https://youtu.be/hY6Z6qNYzmc?t=1630) +- [30:49 Problems of callback, async.js, Proimise, async/await](https://youtu.be/hY6Z6qNYzmc?t=1849) +- [34:00 Add timeout to any function](https://youtu.be/hY6Z6qNYzmc?t=2040) +- [36:55 Make function cancelable](https://youtu.be/hY6Z6qNYzmc?t=2215) +- [37:59 More wrappers](https://youtu.be/hY6Z6qNYzmc?t=2279) +- [39:22 Promisify and Callbackify](https://youtu.be/hY6Z6qNYzmc?t=2362) +- [48:47 Sync function to async](https://youtu.be/hY6Z6qNYzmc?t=2927) +- [41:43 Sync function to Promise](https://youtu.be/hY6Z6qNYzmc?t=2503) +- [43:17 Convertors](https://youtu.be/hY6Z6qNYzmc?t=2597) +- [43:31 Metasync](https://youtu.be/hY6Z6qNYzmc?t=2611) +- [45:26 Function composition](https://youtu.be/hY6Z6qNYzmc?t=2726) +- [47:09 Adynchronous function composition](https://youtu.be/hY6Z6qNYzmc?t=2829) +- [47:58 Flow communication like in electronics](https://youtu.be/hY6Z6qNYzmc?t=2878) +- [50:06 Collectors](https://youtu.be/hY6Z6qNYzmc?t=3006) +- [59:17 Queue](https://youtu.be/hY6Z6qNYzmc?t=3557) + +## [Обзор встроенного Node.js API](https://youtu.be/sOkjR-N6IAs) + +- [1:45 Readline](https://youtu.be/sOkjR-N6IAs?t=105) +- [2:42 Stream](https://youtu.be/sOkjR-N6IAs?t=162) +- [6:51 Buffer](https://youtu.be/sOkjR-N6IAs?t=411) +- [9:15 Child Processes](https://youtu.be/sOkjR-N6IAs?t=555) +- [12:24 Cluster](https://youtu.be/sOkjR-N6IAs?t=744) +- [16:23 Crypto](https://youtu.be/sOkjR-N6IAs?t=983) +- [17:47 DNS](https://youtu.be/sOkjR-N6IAs?t=1067) +- [19:30 Domain](https://youtu.be/sOkjR-N6IAs?t=1170) +- [22:44 Events](https://youtu.be/sOkjR-N6IAs?t=1364) +- [23:16 Errors, Timers](https://youtu.be/sOkjR-N6IAs?t=1396) +- [27:26 File System](https://youtu.be/sOkjR-N6IAs?t=1646) +- [28:56 HTTP](https://youtu.be/sOkjR-N6IAs?t=1736) +- [31:49 OS](https://youtu.be/sOkjR-N6IAs?t=1909) +- [33:38 Process](https://youtu.be/sOkjR-N6IAs?t=2018) +- [41:55 Path](https://youtu.be/sOkjR-N6IAs?t=2515) +- [43:15 TLS/SSL](https://youtu.be/sOkjR-N6IAs?t=2595) +- [44:44 URL](https://youtu.be/sOkjR-N6IAs?t=2684) +- [45:22 Util](https://youtu.be/sOkjR-N6IAs?t=2722) +- [47:00 V8/VM](https://youtu.be/sOkjR-N6IAs?t=2820) +- [49:55 Worker Threads](https://youtu.be/sOkjR-N6IAs?t=2995) +- [50:56 ZLIB](https://youtu.be/sOkjR-N6IAs?t=3056) +- [51:55 Modules](https://youtu.be/sOkjR-N6IAs?t=3115) + +## [Настройка среды: Node.js, npm, git, eslint](https://youtu.be/hSyA7tcNaCE) + +## [Работа с файлами, буферами и файловыми потоками в Node.js](https://youtu.be/eQGBS15vUac) + +- [1:39 Работа с файлами](https://youtu.be/eQGBS15vUac?t=99) +- [35:12 Буферы](https://youtu.be/eQGBS15vUac?t=2112) +- [43:46 Файловые потоки](https://youtu.be/eQGBS15vUac?t=2626) + +## [Наблюдение за файловой системой в Node.js](https://youtu.be/29QINR9rruQ) + +- [0:32 File watch](https://youtu.be/29QINR9rruQ?t=32) +- [4:40 Folder watch](https://youtu.be/29QINR9rruQ?t=280) +- [8:40 Server](https://youtu.be/29QINR9rruQ?t=520) +- [12:55 LiveReload](https://youtu.be/29QINR9rruQ?t=775) +- [24:50 LiverReload в impress](https://youtu.be/29QINR9rruQ?t=1490) + +## [Консоль и командная строка в JavaScript и Node.js](https://youtu.be/5aSZyKi5BmE) + +- [1:20 console](https://youtu.be/5aSZyKi5BmE?t=80) +- [16:00 readline](https://youtu.be/5aSZyKi5BmE?t=960) +- [21:35 cli](https://youtu.be/5aSZyKi5BmE?t=1295) +- [31:15 делаем красивый login screen](https://youtu.be/5aSZyKi5BmE?t=1875) + +## [Архитектурный подход к программированию](https://youtu.be/d_vyO2CkiOc) + +- [00:00:00 Когда нужна архитектура](https://youtu.be/d_vyO2CkiOc?t=0) +- [00:06:07 Принятие решений](https://youtu.be/d_vyO2CkiOc?t=367) +- [00:09:58 Типы связывания](https://youtu.be/d_vyO2CkiOc?t=598) +- [00:20:00 Ошибки](https://youtu.be/d_vyO2CkiOc?t=1200) +- [00:27:15 Принятие решений](https://youtu.be/d_vyO2CkiOc?t=1635) +- [00:37:05 Эволюция архитектурных решений](https://youtu.be/d_vyO2CkiOc?t=2225) +- [00:58:13 Схема современной архитектуры](https://youtu.be/d_vyO2CkiOc?t=3493) +- [01:01:40 субд в браузере](https://youtu.be/d_vyO2CkiOc?t=3700) +- [01:05:20 Альтернативные варианты](https://youtu.be/d_vyO2CkiOc?t=3920) +- [01:12:20 Как на самом деле](https://youtu.be/d_vyO2CkiOc?t=4340) +- [01:13:45 Архитектура мечты](https://youtu.be/d_vyO2CkiOc?t=4425) +- [01:16:45 Современные возможности и требования ](https://youtu.be/d_vyO2CkiOc?t=4605) +- [01:25:20 Топологии](https://youtu.be/d_vyO2CkiOc?t=5120) +- [01:30:45 Итог](https://youtu.be/d_vyO2CkiOc?t=5445) + +## [Модули, слои, структура проекта, песочницы в JavaScript и Node.js](https://youtu.be/O7A9chb573E) + +- [1:00 Пример структуры приложения](https://youtu.be/O7A9chb573E?t=60) +- [14:23 Примеры плохо и хорошо структурированного кода ](https://youtu.be/O7A9chb573E?t=863) +- [25:46 Песочницы](https://youtu.be/O7A9chb573E?t=1546) + +## [Инверсия управления и внедрение зависимостей в Node.js](https://youtu.be/Fz86Fdjz-LM) + +## [Межпроцессовое взаимодействие в Node.js](https://youtu.be/2OXWZFMvfbc) + +## [Слои, связанность и связность кода в JavaScript](https://youtu.be/A3RpwNlVeyY) + +## [Клиент-сервер на Node.js TCP и UDP, DNS](https://youtu.be/bHn-wTlTTR0) + +- [2:25 TCP, простой пример клиент/сервер](https://youtu.be/bHn-wTlTTR0?t=145) +- [20:20 TCP, пример сложнее](https://youtu.be/bHn-wTlTTR0?t=1220) +- [29:26 UDP](https://youtu.be/bHn-wTlTTR0?t=1766) +- [35:14 DNS](https://youtu.be/bHn-wTlTTR0?t=2114) + +## [HTTP сервер на Node.js (routing, cluster, IP sticky)](https://youtu.be/7Ufxj0oTaUo) + +## [HTTP сессии и cookies на чистом Node.js](https://youtu.be/T_wKXuWW4Wo) + +## [HTTP запросы в браузере и Node.js: XMLHttpRequest, fetch](https://youtu.be/wMMki2FEYGY) + +## [Разработка API на Node.js (клиент и сервер)](https://youtu.be/-az912XBCu8) + +## [WebSocket сервер на Node.js (электронные таблицы и чат)](https://youtu.be/Sf7ln3n16ws) + +## [Скаффолдинг для API, UI и данных](https://youtu.be/lipkLQVqDd8) + +## [Высоконагруженные распределенные приложения на Node.js](https://youtu.be/7tfZDABPvVs) + +## [Отдача статики в Node.js](https://youtu.be/n_AdKIzbpBc) + +## [Слой доступа к данным, курсор, транзакция](https://youtu.be/CRcSWtWVvrA) + +## [Работа с базами данных в Node.js на примере PostgreSQL](https://youtu.be/2tDvHQCBt3w) + +## [Паттерн Команда (Command) действие и параметры как объект](https://youtu.be/vER0vYL4hM4) + +## [CQS, CQRS, Event Sourcing - Разделение запросов и модификации данных](https://youtu.be/T2tRc80Q8Qw) + +## [Применение Event Sourcing (command, read, write, bus)](https://youtu.be/kFNtKiK2SPs) + +## [Модель акторов для параллельных вычислений](https://youtu.be/xp5MVKEqxY4) + +## [Утечки памяти в Node.js и JavaScript, сборка мусора и профилирование](https://youtu.be/0oZa64SB2wM) + +## [Atomics, SharedArrayBuffer, worker_threads в Node.js](https://youtu.be/zLm8pnbxSII) + +- [00:00 - початок ](https://youtu.be/zLm8pnbxSII?t=0) +- [03:53 - про worker_threads](https://youtu.be/zLm8pnbxSII?t=233) +- [12:20 - сепарація на worker i master](https://youtu.be/zLm8pnbxSII?t=740) +- [14:57 - як використовувати worker ](https://youtu.be/zLm8pnbxSII?t=897) +- [25:00 - про Atomics](https://youtu.be/zLm8pnbxSII?t=1500) +- [41:00 - Atomics i worker_threads робота в парі](https://youtu.be/zLm8pnbxSII?t=2460) + +## [Семафоры и мьютексы в JavaScript и Node.js](https://youtu.be/JNLrITevhRI) + +- [00:00 - теорія](https://youtu.be/JNLrITevhRI?t=0) +- [8:55 - приклад worker_threads без семафора ](https://youtu.be/JNLrITevhRI?t=535) +- [15:29 - про семафор, семафор бінарний, семафор з лічильником і Atomics ](https://youtu.be/JNLrITevhRI?t=929) +- [53:52 - мютекси та різниця між семафором ](https://youtu.be/JNLrITevhRI?t=3232) +- [58:28 - про deadlock](https://youtu.be/JNLrITevhRI?t=3508) +- [1:02:12 - про livelock і стан гонки](https://youtu.be/JNLrITevhRI?t=3732) + +## [Разделяемая память в многопоточном Node.js. Тимур Шемсединов. JS Fest 2019 Spring](https://youtu.be/KNsm_iIQt7U) + +## [Необработанные ошибки в промисах на Node.js](https://youtu.be/1Ml5NE2fsZ8) + +## [Проблема асинхронного стектрейса в JavaScript и Node.js](https://youtu.be/pfiHTx3j87Y) + +## [Логирование на Node.js и JavaScript](https://youtu.be/4DkZj2Cdokc) + +## [Graceful Shutdown в Node.js](https://youtu.be/ZstnowFeCe0) + +## [Безопасность приложений Node.js Security](https://youtu.be/Pdfo1G-gI6s) + +## [Serverless Clouds (FaaS) и изоляция контекстов запросов в Node.js](https://youtu.be/x-Rd6fPV6L8) + +## [Node.js в 2021: обзор платформы и вызовы на следующее десятилетие](https://youtu.be/nnB7ADYso8s) + +## [Семинар: Node.js в 2021, ответы на вопросы и обсуждение](https://youtu.be/zYRDhxj0zhQ) + +## [GRASP принципы с адаптацией для JavaScript и Node.js](https://youtu.be/ExauFjYV_lQ) + +- [5:03 Information Expert](https://youtu.be/ExauFjYV_lQ?t=303) +- [13:06 Creator](https://youtu.be/ExauFjYV_lQ?t=786) +- [18:15 Cohesion & Coupling](https://youtu.be/ExauFjYV_lQ?t=1095) +- [21:33 Controller](https://youtu.be/ExauFjYV_lQ?t=1293) +- [24:58 Polymorphism](https://youtu.be/ExauFjYV_lQ?t=1498) +- [31:55 Indirection](https://youtu.be/ExauFjYV_lQ?t=1915) +- [34:34 Pure Fabrication](https://youtu.be/ExauFjYV_lQ?t=2074) +- [38:36 Protected Variations](https://youtu.be/ExauFjYV_lQ?t=2316) + +## [GRASP: принцип информационный эксперт с адаптацией для JavaScript и Node.js](https://youtu.be/cCHL329_As0) + +## [GRASP: Зацепление и связность в JavaScript и Node.js - coupling and cohesion](https://youtu.be/IGXdPOZ3Fyk) + +## [GRASP: Чистая выдумка для JavaScript и Node.js - Pure Fabrication](https://youtu.be/CV577a0RHBM) + +## [GRASP: Декомпозиция класса Application из библиотеки impress технологического стека Metarhia](https://youtu.be/4AMVQ2-2DcM) + +## [Node.js - плохие подходы и хорошие стороны - Postindustria Podcast](https://youtu.be/oEyS_TNiw2g) + +## [Node.js модули: ECMA, Common.js, Module API](https://youtu.be/CJr2vS3hjMU) + +- [1:02 export модулей](https://youtu.be/CJr2vS3hjMU?t=62) +- [3:00 require модулей](https://youtu.be/CJr2vS3hjMU?t=180) +- [5:35 require-resolve модулей](https://youtu.be/CJr2vS3hjMU?t=335) +- [12:15 cache](https://youtu.be/CJr2vS3hjMU?t=735) +- [18:38 немного об singleton](https://youtu.be/CJr2vS3hjMU?t=1118) +- [19:53 модуль global](https://youtu.be/CJr2vS3hjMU?t=1193) +- [20:43 пример с mixin-ами](https://youtu.be/CJr2vS3hjMU?t=1243) +- [25:13 пример ecma скрипт модуля - export](https://youtu.be/CJr2vS3hjMU?t=1513) +- [26:10 пример ecma скрипт модуля - import](https://youtu.be/CJr2vS3hjMU?t=1570) +- [27:20 пример динамического импорта](https://youtu.be/CJr2vS3hjMU?t=1640) +- [31:10 загрузка ф-ии createRequire](https://youtu.be/CJr2vS3hjMU?t=1870) +- [41:00 подгрузка module через require](https://youtu.be/CJr2vS3hjMU?t=2460) +- [43:40 подгрузка module через import](https://youtu.be/CJr2vS3hjMU?t=2620) + +## [Node.js модули и пакеты формата ECMA и CommonJS, использование package.json и node_modules](https://youtu.be/31sX_3IbXs4) + +- [1:00 подгрузка пакетов package](https://youtu.be/31sX_3IbXs4?t=60) +- [5:40 загрузка пакетов](https://youtu.be/31sX_3IbXs4?t=340) +- [9:00 подгрузка файлов нового формата .mjs](https://youtu.be/31sX_3IbXs4?t=540) +- [10:47 импорт ecma скрипт модулей с .js файлов](https://youtu.be/31sX_3IbXs4?t=647) +- [13:20 export пакетов](https://youtu.be/31sX_3IbXs4?t=800) +- [22:30 сравнение cache-й модулей](https://youtu.be/31sX_3IbXs4?t=1350) + +## [Асинхронный пул для worker thread pool в Node.js](https://youtu.be/Jj5KZRq4wYI) + +## [Контрактное программирование с примерами на JavaScript и Node.js](https://youtu.be/K5_kSUvbGEQ) + +## [Hacktoberfest 2021: лайвкодинг и ревью кода, Node.js worker_threads и thread pool для Metarhia](https://youtu.be/qipIRQptP_4) diff --git a/Courses/NodeJS.md b/Courses/NodeJS.md index 4d7c254..74a737e 100644 --- a/Courses/NodeJS.md +++ b/Courses/NodeJS.md @@ -151,275 +151,3 @@ ## Вспомогательные темы - [Асинхронный пул для worker thread pool в Node.js](https://youtu.be/Jj5KZRq4wYI) - -# Node.js (таймкоды) - -## [Node.js Введение в технологию](https://youtu.be/WBcHgaoHh1k) - -- [2:53 Основные идеи Node.js](https://youtu.be/WBcHgaoHh1k?t=173) -- [13:09 Приемущества/Недостатки JavaScript](https://youtu.be/WBcHgaoHh1k?t=789) -- [16:58 Что такое Node.js](https://youtu.be/WBcHgaoHh1k?t=1018) -- [20:52 Начало работы с Node.js](https://youtu.be/WBcHgaoHh1k?t=1252) -- [25:00 Встроенный API](https://youtu.be/WBcHgaoHh1k?t=1500) -- [33:55 Менеджер пакетов NPM](https://youtu.be/WBcHgaoHh1k?t=2035) -- [40:45 Структура проектов](https://youtu.be/WBcHgaoHh1k?t=2445) -- [44:35 Файлы package.json, package-lock.json](https://youtu.be/WBcHgaoHh1k?t=2675) -- [52:03 Репозиторий NPM](https://youtu.be/WBcHgaoHh1k?t=3123) -- [59:50 Однопоточность и многопоточность](https://youtu.be/WBcHgaoHh1k?t=3590) -- [1:05:30 Межпроцессовое взаимодействие](https://youtu.be/WBcHgaoHh1k?t=3930) -- [1:06:08 Асинхронный ввод/вывод](https://youtu.be/WBcHgaoHh1k?t=3968) -- [1:11:11 Производительность](https://youtu.be/WBcHgaoHh1k?t=4271) -- [1:13:02 Память](https://youtu.be/WBcHgaoHh1k?t=4382) -- [1:16:21 Отладка и профилирование](https://youtu.be/WBcHgaoHh1k?t=4581) -- [1:21:27 Ошибки](https://youtu.be/WBcHgaoHh1k?t=4887) -- [1:26:42 Обновление кода и перезапуск](https://youtu.be/WBcHgaoHh1k?t=5202) -- [1:28:43 Ассинхронное программирование](https://youtu.be/WBcHgaoHh1k?t=5323) -- [1:30:00 Примеры внедрения, интеракт. TV](https://youtu.be/WBcHgaoHh1k?t=5400) -- [1:31:00 Сферы применения Node.js](https://youtu.be/WBcHgaoHh1k?t=5460) -- [1:36:44 Полезные материалы](https://youtu.be/WBcHgaoHh1k?t=5804) - -## [Node.js в 2019 году (состояние и перспективы)](https://youtu.be/CUU49jjHloM) - -- [0:45 Node.js уже 10 лет](https://youtu.be/CUU49jjHloM?t=45) -- [5:39 Обзор новых возможностей Node.js](https://youtu.be/CUU49jjHloM?t=339) -- [18:14 Возможности для паралельного программирования на Node.js](https://youtu.be/CUU49jjHloM?t=1094) -- [20:08 Как работают thread и process в Node.js](https://youtu.be/CUU49jjHloM?t=1208) -- [20:47 Обзор последствий отсутствия изоляции в Node.js](https://youtu.be/CUU49jjHloM?t=1247) -- [20:33 Проблемы отсутствия изоляции в Node.js](https://youtu.be/CUU49jjHloM?t=1233) -- [38:27 Способы изоляции Node.js кода](https://youtu.be/CUU49jjHloM?t=2307) -- [48:24 Изоляция и кластеризации с threads в Node.js v12](https://youtu.be/CUU49jjHloM?t=2904) -- [56:59 Области применения Node.js: Локальные приложения](https://youtu.be/CUU49jjHloM?t=3419) -- [1:02:02 Области применения Node.js: Сервера](https://youtu.be/CUU49jjHloM?t=3722) -- [1:05:49 Области применения Node.js: Клиенты](https://youtu.be/CUU49jjHloM?t=3949) -- [1:08:58 Области применения Node.js: Hardware](https://youtu.be/CUU49jjHloM?t=4138) -- [1:09:28 Редкие области применения Node.js](https://youtu.be/CUU49jjHloM?t=4168) -- [1:11:55 Не подходящие области применения Node.js](https://youtu.be/CUU49jjHloM?t=4315) -- [1:13:53 Deno как экспементальная альтернатива Node.js](https://youtu.be/CUU49jjHloM?t=4433) -- [1:21:02 Обзор ссылок по теме](https://youtu.be/CUU49jjHloM?t=4862) -- [1:23:06 Ответы на вопросы](https://youtu.be/CUU49jjHloM?t=4986) - -## [Асинхронное программирование в Node.js и JavaScript](https://youtu.be/hY6Z6qNYzmc) - -- [5:45 Callbacks](https://youtu.be/hY6Z6qNYzmc?t=345) -- [10:00 Async.js or analogues](https://youtu.be/hY6Z6qNYzmc?t=600) -- [15:47 Events](https://youtu.be/hY6Z6qNYzmc?t=947) -- [18:00 Promise](https://youtu.be/hY6Z6qNYzmc?t=1080) -- [25:20 async/await](https://youtu.be/hY6Z6qNYzmc?t=1520) -- [27:10 Functor + Chaining + composition](https://youtu.be/hY6Z6qNYzmc?t=1630) -- [30:49 Problems of callback, async.js, Proimise, async/await](https://youtu.be/hY6Z6qNYzmc?t=1849) -- [34:00 Add timeout to any function](https://youtu.be/hY6Z6qNYzmc?t=2040) -- [36:55 Make function cancelable](https://youtu.be/hY6Z6qNYzmc?t=2215) -- [37:59 More wrappers](https://youtu.be/hY6Z6qNYzmc?t=2279) -- [39:22 Promisify and Callbackify](https://youtu.be/hY6Z6qNYzmc?t=2362) -- [48:47 Sync function to async](https://youtu.be/hY6Z6qNYzmc?t=2927) -- [41:43 Sync function to Promise](https://youtu.be/hY6Z6qNYzmc?t=2503) -- [43:17 Convertors](https://youtu.be/hY6Z6qNYzmc?t=2597) -- [43:31 Metasync](https://youtu.be/hY6Z6qNYzmc?t=2611) -- [45:26 Function composition](https://youtu.be/hY6Z6qNYzmc?t=2726) -- [47:09 Adynchronous function composition](https://youtu.be/hY6Z6qNYzmc?t=2829) -- [47:58 Flow communication like in electronics](https://youtu.be/hY6Z6qNYzmc?t=2878) -- [50:06 Collectors](https://youtu.be/hY6Z6qNYzmc?t=3006) -- [59:17 Queue](https://youtu.be/hY6Z6qNYzmc?t=3557) - -## [Обзор встроенного Node.js API](https://youtu.be/sOkjR-N6IAs) - -- [1:45 Readline](https://youtu.be/sOkjR-N6IAs?t=105) -- [2:42 Stream](https://youtu.be/sOkjR-N6IAs?t=162) -- [6:51 Buffer](https://youtu.be/sOkjR-N6IAs?t=411) -- [9:15 Child Processes](https://youtu.be/sOkjR-N6IAs?t=555) -- [12:24 Cluster](https://youtu.be/sOkjR-N6IAs?t=744) -- [16:23 Crypto](https://youtu.be/sOkjR-N6IAs?t=983) -- [17:47 DNS](https://youtu.be/sOkjR-N6IAs?t=1067) -- [19:30 Domain](https://youtu.be/sOkjR-N6IAs?t=1170) -- [22:44 Events](https://youtu.be/sOkjR-N6IAs?t=1364) -- [23:16 Errors, Timers](https://youtu.be/sOkjR-N6IAs?t=1396) -- [27:26 File System](https://youtu.be/sOkjR-N6IAs?t=1646) -- [28:56 HTTP](https://youtu.be/sOkjR-N6IAs?t=1736) -- [31:49 OS](https://youtu.be/sOkjR-N6IAs?t=1909) -- [33:38 Process](https://youtu.be/sOkjR-N6IAs?t=2018) -- [41:55 Path](https://youtu.be/sOkjR-N6IAs?t=2515) -- [43:15 TLS/SSL](https://youtu.be/sOkjR-N6IAs?t=2595) -- [44:44 URL](https://youtu.be/sOkjR-N6IAs?t=2684) -- [45:22 Util](https://youtu.be/sOkjR-N6IAs?t=2722) -- [47:00 V8/VM](https://youtu.be/sOkjR-N6IAs?t=2820) -- [49:55 Worker Threads](https://youtu.be/sOkjR-N6IAs?t=2995) -- [50:56 ZLIB](https://youtu.be/sOkjR-N6IAs?t=3056) -- [51:55 Modules](https://youtu.be/sOkjR-N6IAs?t=3115) - -## [Настройка среды: Node.js, npm, git, eslint](https://youtu.be/hSyA7tcNaCE) - -## [Работа с файлами, буферами и файловыми потоками в Node.js](https://youtu.be/eQGBS15vUac) - -- [1:39 Работа с файлами](https://youtu.be/eQGBS15vUac?t=99) -- [35:12 Буферы](https://youtu.be/eQGBS15vUac?t=2112) -- [43:46 Файловые потоки](https://youtu.be/eQGBS15vUac?t=2626) - -## [Наблюдение за файловой системой в Node.js](https://youtu.be/29QINR9rruQ) - -- [0:32 File watch](https://youtu.be/29QINR9rruQ?t=32) -- [4:40 Folder watch](https://youtu.be/29QINR9rruQ?t=280) -- [8:40 Server](https://youtu.be/29QINR9rruQ?t=520) -- [12:55 LiveReload](https://youtu.be/29QINR9rruQ?t=775) -- [24:50 LiverReload в impress](https://youtu.be/29QINR9rruQ?t=1490) - -## [Консоль и командная строка в JavaScript и Node.js](https://youtu.be/5aSZyKi5BmE) - -- [1:20 console](https://youtu.be/5aSZyKi5BmE?t=80) -- [16:00 readline](https://youtu.be/5aSZyKi5BmE?t=960) -- [21:35 cli](https://youtu.be/5aSZyKi5BmE?t=1295) -- [31:15 делаем красивый login screen](https://youtu.be/5aSZyKi5BmE?t=1875) - -## [Архитектурный подход к программированию](https://youtu.be/d_vyO2CkiOc) - -- [00:00:00 Когда нужна архитектура](https://youtu.be/d_vyO2CkiOc?t=0) -- [00:06:07 Принятие решений](https://youtu.be/d_vyO2CkiOc?t=367) -- [00:09:58 Типы связывания](https://youtu.be/d_vyO2CkiOc?t=598) -- [00:20:00 Ошибки](https://youtu.be/d_vyO2CkiOc?t=1200) -- [00:27:15 Принятие решений](https://youtu.be/d_vyO2CkiOc?t=1635) -- [00:37:05 Эволюция архитектурных решений](https://youtu.be/d_vyO2CkiOc?t=2225) -- [00:58:13 Схема современной архитектуры](https://youtu.be/d_vyO2CkiOc?t=3493) -- [01:01:40 субд в браузере](https://youtu.be/d_vyO2CkiOc?t=3700) -- [01:05:20 Альтернативные варианты](https://youtu.be/d_vyO2CkiOc?t=3920) -- [01:12:20 Как на самом деле](https://youtu.be/d_vyO2CkiOc?t=4340) -- [01:13:45 Архитектура мечты](https://youtu.be/d_vyO2CkiOc?t=4425) -- [01:16:45 Современные возможности и требования ](https://youtu.be/d_vyO2CkiOc?t=4605) -- [01:25:20 Топологии](https://youtu.be/d_vyO2CkiOc?t=5120) -- [01:30:45 Итог](https://youtu.be/d_vyO2CkiOc?t=5445) - -## [Модули, слои, структура проекта, песочницы в JavaScript и Node.js](https://youtu.be/O7A9chb573E) - -- [1:00 Пример структуры приложения](https://youtu.be/O7A9chb573E?t=60) -- [14:23 Примеры плохо и хорошо структурированного кода ](https://youtu.be/O7A9chb573E?t=863) -- [25:46 Песочницы](https://youtu.be/O7A9chb573E?t=1546) - -## [Инверсия управления и внедрение зависимостей в Node.js](https://youtu.be/Fz86Fdjz-LM) - -## [Межпроцессовое взаимодействие в Node.js](https://youtu.be/2OXWZFMvfbc) - -## [Слои, связанность и связность кода в JavaScript](https://youtu.be/A3RpwNlVeyY) - -## [Клиент-сервер на Node.js TCP и UDP, DNS](https://youtu.be/bHn-wTlTTR0) - -- [2:25 TCP, простой пример клиент/сервер](https://youtu.be/bHn-wTlTTR0?t=145) -- [20:20 TCP, пример сложнее](https://youtu.be/bHn-wTlTTR0?t=1220) -- [29:26 UDP](https://youtu.be/bHn-wTlTTR0?t=1766) -- [35:14 DNS](https://youtu.be/bHn-wTlTTR0?t=2114) - -## [HTTP сервер на Node.js (routing, cluster, IP sticky)](https://youtu.be/7Ufxj0oTaUo) - -## [HTTP сессии и cookies на чистом Node.js](https://youtu.be/T_wKXuWW4Wo) - -## [HTTP запросы в браузере и Node.js: XMLHttpRequest, fetch](https://youtu.be/wMMki2FEYGY) - -## [Разработка API на Node.js (клиент и сервер)](https://youtu.be/-az912XBCu8) - -## [WebSocket сервер на Node.js (электронные таблицы и чат)](https://youtu.be/Sf7ln3n16ws) - -## [Скаффолдинг для API, UI и данных](https://youtu.be/lipkLQVqDd8) - -## [Высоконагруженные распределенные приложения на Node.js](https://youtu.be/7tfZDABPvVs) - -## [Отдача статики в Node.js](https://youtu.be/n_AdKIzbpBc) - -## [Слой доступа к данным, курсор, транзакция](https://youtu.be/CRcSWtWVvrA) - -## [Работа с базами данных в Node.js на примере PostgreSQL](https://youtu.be/2tDvHQCBt3w) - -## [Паттерн Команда (Command) действие и параметры как объект](https://youtu.be/vER0vYL4hM4) - -## [CQS, CQRS, Event Sourcing - Разделение запросов и модификации данных](https://youtu.be/T2tRc80Q8Qw) - -## [Применение Event Sourcing (command, read, write, bus)](https://youtu.be/kFNtKiK2SPs) - -## [Модель акторов для параллельных вычислений](https://youtu.be/xp5MVKEqxY4) - -## [Утечки памяти в Node.js и JavaScript, сборка мусора и профилирование](https://youtu.be/0oZa64SB2wM) - -## [Atomics, SharedArrayBuffer, worker_threads в Node.js](https://youtu.be/zLm8pnbxSII) - -- [00:00 - початок ](https://youtu.be/zLm8pnbxSII?t=0) -- [03:53 - про worker_threads](https://youtu.be/zLm8pnbxSII?t=233) -- [12:20 - сепарація на worker i master](https://youtu.be/zLm8pnbxSII?t=740) -- [14:57 - як використовувати worker ](https://youtu.be/zLm8pnbxSII?t=897) -- [25:00 - про Atomics](https://youtu.be/zLm8pnbxSII?t=1500) -- [41:00 - Atomics i worker_threads робота в парі](https://youtu.be/zLm8pnbxSII?t=2460) - -## [Семафоры и мьютексы в JavaScript и Node.js](https://youtu.be/JNLrITevhRI) - -- [00:00 - теорія](https://youtu.be/JNLrITevhRI?t=0) -- [8:55 - приклад worker_threads без семафора ](https://youtu.be/JNLrITevhRI?t=535) -- [15:29 - про семафор, семафор бінарний, семафор з лічильником і Atomics ](https://youtu.be/JNLrITevhRI?t=929) -- [53:52 - мютекси та різниця між семафором ](https://youtu.be/JNLrITevhRI?t=3232) -- [58:28 - про deadlock](https://youtu.be/JNLrITevhRI?t=3508) -- [1:02:12 - про livelock і стан гонки](https://youtu.be/JNLrITevhRI?t=3732) - -## [Разделяемая память в многопоточном Node.js. Тимур Шемсединов. JS Fest 2019 Spring](https://youtu.be/KNsm_iIQt7U) - -## [Необработанные ошибки в промисах на Node.js](https://youtu.be/1Ml5NE2fsZ8) - -## [Проблема асинхронного стектрейса в JavaScript и Node.js](https://youtu.be/pfiHTx3j87Y) - -## [Логирование на Node.js и JavaScript](https://youtu.be/4DkZj2Cdokc) - -## [Graceful Shutdown в Node.js](https://youtu.be/ZstnowFeCe0) - -## [Безопасность приложений Node.js Security](https://youtu.be/Pdfo1G-gI6s) - -## [Serverless Clouds (FaaS) и изоляция контекстов запросов в Node.js](https://youtu.be/x-Rd6fPV6L8) - -## [Node.js в 2021: обзор платформы и вызовы на следующее десятилетие](https://youtu.be/nnB7ADYso8s) - -## [Семинар: Node.js в 2021, ответы на вопросы и обсуждение](https://youtu.be/zYRDhxj0zhQ) - -## [GRASP принципы с адаптацией для JavaScript и Node.js](https://youtu.be/ExauFjYV_lQ) - -- [5:03 Information Expert](https://youtu.be/ExauFjYV_lQ?t=303) -- [13:06 Creator](https://youtu.be/ExauFjYV_lQ?t=786) -- [18:15 Cohesion & Coupling](https://youtu.be/ExauFjYV_lQ?t=1095) -- [21:33 Controller](https://youtu.be/ExauFjYV_lQ?t=1293) -- [24:58 Polymorphism](https://youtu.be/ExauFjYV_lQ?t=1498) -- [31:55 Indirection](https://youtu.be/ExauFjYV_lQ?t=1915) -- [34:34 Pure Fabrication](https://youtu.be/ExauFjYV_lQ?t=2074) -- [38:36 Protected Variations](https://youtu.be/ExauFjYV_lQ?t=2316) - -## [GRASP: принцип информационный эксперт с адаптацией для JavaScript и Node.js](https://youtu.be/cCHL329_As0) - -## [GRASP: Зацепление и связность в JavaScript и Node.js - coupling and cohesion](https://youtu.be/IGXdPOZ3Fyk) - -## [GRASP: Чистая выдумка для JavaScript и Node.js - Pure Fabrication](https://youtu.be/CV577a0RHBM) - -## [GRASP: Декомпозиция класса Application из библиотеки impress технологического стека Metarhia](https://youtu.be/4AMVQ2-2DcM) - -## [Node.js - плохие подходы и хорошие стороны - Postindustria Podcast](https://youtu.be/oEyS_TNiw2g) - -## [Node.js модули: ECMA, Common.js, Module API](https://youtu.be/CJr2vS3hjMU) - -- [1:02 export модулей](https://youtu.be/CJr2vS3hjMU?t=62) -- [3:00 require модулей](https://youtu.be/CJr2vS3hjMU?t=180) -- [5:35 require-resolve модулей](https://youtu.be/CJr2vS3hjMU?t=335) -- [12:15 cache](https://youtu.be/CJr2vS3hjMU?t=735) -- [18:38 немного об singleton](https://youtu.be/CJr2vS3hjMU?t=1118) -- [19:53 модуль global](https://youtu.be/CJr2vS3hjMU?t=1193) -- [20:43 пример с mixin-ами](https://youtu.be/CJr2vS3hjMU?t=1243) -- [25:13 пример ecma скрипт модуля - export](https://youtu.be/CJr2vS3hjMU?t=1513) -- [26:10 пример ecma скрипт модуля - import](https://youtu.be/CJr2vS3hjMU?t=1570) -- [27:20 пример динамического импорта](https://youtu.be/CJr2vS3hjMU?t=1640) -- [31:10 загрузка ф-ии createRequire](https://youtu.be/CJr2vS3hjMU?t=1870) -- [41:00 подгрузка module через require](https://youtu.be/CJr2vS3hjMU?t=2460) -- [43:40 подгрузка module через import](https://youtu.be/CJr2vS3hjMU?t=2620) - -## [Node.js модули и пакеты формата ECMA и CommonJS, использование package.json и node_modules](https://youtu.be/31sX_3IbXs4) - -- [1:00 подгрузка пакетов package](https://youtu.be/31sX_3IbXs4?t=60) -- [5:40 загрузка пакетов](https://youtu.be/31sX_3IbXs4?t=340) -- [9:00 подгрузка файлов нового формата .mjs](https://youtu.be/31sX_3IbXs4?t=540) -- [10:47 импорт ecma скрипт модулей с .js файлов](https://youtu.be/31sX_3IbXs4?t=647) -- [13:20 export пакетов](https://youtu.be/31sX_3IbXs4?t=800) -- [22:30 сравнение cache-й модулей](https://youtu.be/31sX_3IbXs4?t=1350) - -## [Асинхронный пул для worker thread pool в Node.js](https://youtu.be/Jj5KZRq4wYI) - -## [Контрактное программирование с примерами на JavaScript и Node.js](https://youtu.be/K5_kSUvbGEQ) - -## [Hacktoberfest 2021: лайвкодинг и ревью кода, Node.js worker_threads и thread pool для Metarhia](https://youtu.be/qipIRQptP_4) - From cfcede3b618d91b453b7b89512dccc615c0e4818 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 4 Aug 2022 15:09:39 +0300 Subject: [PATCH 007/217] Move timecodes for Fundamentals to separate file --- Courses/Fundamentals-timecodes.md | 976 ++++++++++++++++++++++++++++++ Courses/Fundamentals.md | 975 ----------------------------- 2 files changed, 976 insertions(+), 975 deletions(-) create mode 100644 Courses/Fundamentals-timecodes.md diff --git a/Courses/Fundamentals-timecodes.md b/Courses/Fundamentals-timecodes.md new file mode 100644 index 0000000..4c93fe1 --- /dev/null +++ b/Courses/Fundamentals-timecodes.md @@ -0,0 +1,976 @@ +# Таймкоды к курсу "Основы программирования" + +Общее оглавление курса тут: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Fundamentals.md + +## [Карта специальности инженер-программист](https://youtu.be/SE5aXH-yf0I) + +- [00:00:00 Введение](https://youtu.be/SE5aXH-yf0I?t=0) +- [00:02:21 Что такое программирование? ](https://youtu.be/SE5aXH-yf0I?t=141) +- [00:05:55 Связанные понятия ](https://youtu.be/SE5aXH-yf0I?t=355) +- [00:06:43 Основы программной инженерии ](https://youtu.be/SE5aXH-yf0I?t=403) +- [00:11:42 Предсказуемые вычисления ](https://youtu.be/SE5aXH-yf0I?t=702) +- [00:14:36 Моделирование](https://youtu.be/SE5aXH-yf0I?t=876) +- [00:14:52 Классификация моделей ](https://youtu.be/SE5aXH-yf0I?t=892) +- [00:17:33 Схемы моделирования ](https://youtu.be/SE5aXH-yf0I?t=1053) +- [00:22:23 Парадигмы программирования ](https://youtu.be/SE5aXH-yf0I?t=1343) +- [00:23:16 Императивное и функциональное программирование ](https://youtu.be/SE5aXH-yf0I?t=1396) +- [00:28:25 Неструктурное программирование ](https://youtu.be/SE5aXH-yf0I?t=1705) +- [00:30:01 Структурное программирование ](https://youtu.be/SE5aXH-yf0I?t=1801) +- [00:30:46 Процедурное программирование ](https://youtu.be/SE5aXH-yf0I?t=1846) +- [00:31:18 Объектно-ориетированное программирование ](https://youtu.be/SE5aXH-yf0I?t=1878) +- [00:31:48 Прототипно-ориетированное программирование ](https://youtu.be/SE5aXH-yf0I?t=1908) +- [00:32:14 Функциональное программирование ](https://youtu.be/SE5aXH-yf0I?t=1934) +- [00:32:48 Узконаправленное программирование](https://youtu.be/SE5aXH-yf0I?t=1968) +- [00:33:44 Техники и технологии](https://youtu.be/SE5aXH-yf0I?t=2024) +- [00:36:55 Реактивное программирование и Событийно-ориентированное](https://youtu.be/SE5aXH-yf0I?t=2215) +- [00:38:16 Функционально-реактивное программирование ](https://youtu.be/SE5aXH-yf0I?t=2296) +- [00:38:39 Модель акторов](https://youtu.be/SE5aXH-yf0I?t=2319) +- [00:39:49 Метапрограммирование ](https://youtu.be/SE5aXH-yf0I?t=2389) +- [00:43:09 Системное и прикладное программирование](https://youtu.be/SE5aXH-yf0I?t=2589) +- [00:44:25 Задачи программной инженерии ](https://youtu.be/SE5aXH-yf0I?t=2665) +- [00:50:46 Как преодолеть сложность ](https://youtu.be/SE5aXH-yf0I?t=3046) +- [00:52:16 Данные и логика ](https://youtu.be/SE5aXH-yf0I?t=3136) +- [00:57:49 Разработка программного обеспечения ](https://youtu.be/SE5aXH-yf0I?t=3469) +- [01:04:50 Подход к разработке ](https://youtu.be/SE5aXH-yf0I?t=3890) +- [01:06:04 Гибридная разработка ](https://youtu.be/SE5aXH-yf0I?t=3964) +- [01:07:10 Принцип NIH ](https://youtu.be/SE5aXH-yf0I?t=4030) +- [01:09:12 Классификация приложений по месту запуска](https://youtu.be/SE5aXH-yf0I?t=4152) +- [01:12:17 Схемы и примеры](https://youtu.be/SE5aXH-yf0I?t=4337) +## [Введение в программирование (1 часть)](https://youtu.be/5Gt61EX6HZ4) + +- [0:00:02 лекция о базовых понятиях для начинающих](https://youtu.be/5Gt61EX6HZ4?t=2) +- [0:01:43 что-то уже знаете / слышали](https://youtu.be/5Gt61EX6HZ4?t=103) +- [0:04:50 терминология важна](https://youtu.be/5Gt61EX6HZ4?t=290) +- [0:05:45 инструкция или оператор / Statement](https://youtu.be/5Gt61EX6HZ4?t=345) +- [0:07:23 синтаксис / Syntax](https://youtu.be/5Gt61EX6HZ4?t=443) +- [0:09:21 почти все группы операторов / Statements](https://youtu.be/5Gt61EX6HZ4?t=561) +- [0:13:27 операция 0:14:09 команда 0:15:03 директива](https://youtu.be/5Gt61EX6HZ4?t=807) +- [0:16:59 выражение / Expression](https://youtu.be/5Gt61EX6HZ4?t=1019) +- [0:20:53 значение / Value](https://youtu.be/5Gt61EX6HZ4?t=1253) +- [0:22:28 тип / Type](https://youtu.be/5Gt61EX6HZ4?t=1348) +- [0:27:22 литерал / Literal](https://youtu.be/5Gt61EX6HZ4?t=1642) +- [0:28:46 скаляр / Scalar, Primitive, Atomic value](https://youtu.be/5Gt61EX6HZ4?t=1726) +- [0:31:02 ссылка / Reference](https://youtu.be/5Gt61EX6HZ4?t=1862) +- [0:34:05 идентификатор / Identifier](https://youtu.be/5Gt61EX6HZ4?t=2045) +- [0:37:31 переменная / Variable](https://youtu.be/5Gt61EX6HZ4?t=2251) +- [0:40:08 присвоение / Assignment](https://youtu.be/5Gt61EX6HZ4?t=2408) +- [0:41:29 константа / Constant](https://youtu.be/5Gt61EX6HZ4?t=2489) +- [0:43:16 структурные типы / Composed types](https://youtu.be/5Gt61EX6HZ4?t=2596) +- [0:44:03 флаг / Flag](https://www.youtube.com/watch?v=5Gt61EX6HZ4&t=2643s) +- [0:45:09 перечисляемый тип](https://youtu.be/5Gt61EX6HZ4?t=2643) +- [0:46:02 алгоритм / Algorithm](https://youtu.be/5Gt61EX6HZ4?t=2762) +- [0:47:40 программа / Program](https://youtu.be/5Gt61EX6HZ4?t=2860) +- [0:49:01 инженерия / Engineering](https://youtu.be/5Gt61EX6HZ4?t=2941) +- [0:50:42 инженерия программного обеспечения / Software engineering](https://youtu.be/5Gt61EX6HZ4?t=3042) +- [0:52:03 программирование / Programming](https://youtu.be/5Gt61EX6HZ4?t=3123) +- [0:53:31 кодирование / Coding](https://youtu.be/5Gt61EX6HZ4?t=3211) +- [0:54:15 разработка программного обеспечения / Software development](https://youtu.be/5Gt61EX6HZ4?t=3255) +- [0:58:49 процедура, функция, подпрограмма, метод: различия](https://youtu.be/5Gt61EX6HZ4?t=3529) +- [0:59:15 блок кода / Block of code](https://youtu.be/5Gt61EX6HZ4?t=3555) +- [1:01:58 процедура или подпрограмма / Procedure or Subroutine](https://youtu.be/5Gt61EX6HZ4?t=3718) +- [1:05:18 функция / Function](https://youtu.be/5Gt61EX6HZ4?t=3918) +- [1:08:06 сигнатура функции / Function signature](https://youtu.be/5Gt61EX6HZ4?t=4086) +- [1:09:16 метод / Method](https://youtu.be/5Gt61EX6HZ4?t=4156) +- [1:10:37 цикл / Loop](https://www.youtube.com/watch?v=5Gt61EX6HZ4&t=4237s) +- [1:10:52 итерирование](https://www.youtube.com/watch?v=5Gt61EX6HZ4&t=4252s) +- [1:11:40 функциональное программирование](https://youtu.be/5Gt61EX6HZ4?t=4237) +- [1:13:05 условие / Conditional statements / ветвление](https://youtu.be/5Gt61EX6HZ4?t=4385) +- [1:14:54 парадигма программирования / Programming paradigm](https://youtu.be/5Gt61EX6HZ4?t=4494) +## [Семинар: Обсуждение плана и материалов курса «Основы программирования»](https://youtu.be/bQMTbRWrteU) + +- [0:15 - вопрос по операционным системам](https://youtu.be/bQMTbRWrteU?t=15) +- [3:35 - какой язык посоветуете из функционального программирования](https://youtu.be/bQMTbRWrteU?t=215) +- [4:40 - время нужное для прохождения курса](https://youtu.be/bQMTbRWrteU?t=280) +- [7:25 - учебники по JS и туториал](https://youtu.be/bQMTbRWrteU?t=445) +- [11:00 - экзамены, сертификат для студентов из других стран](https://youtu.be/bQMTbRWrteU?t=660) +- [12:45 - как будет проходить экзамен](https://youtu.be/bQMTbRWrteU?t=765) +- [14:55 - сколько времени нужно уделять в неделю или в день](https://youtu.be/bQMTbRWrteU?t=895) +- [17:35 - куда задавать вопросы](https://youtu.be/bQMTbRWrteU?t=1055) +- [18:56 - структура курса](https://youtu.be/bQMTbRWrteU?t=1136) +- [22:30 - контроль решения задач](https://youtu.be/bQMTbRWrteU?t=1350) +- [23:35 - сферы применения Node.js](https://youtu.be/bQMTbRWrteU?t=1415) +- [24:22 - возможно ли посещать курс лично](https://youtu.be/bQMTbRWrteU?t=1462) +- [26:23 - актуальность изучения С++ и Rust](https://youtu.be/bQMTbRWrteU?t=1583) +- [27:48 - стану ли я программистом пройдя курс](https://youtu.be/bQMTbRWrteU?t=1668) +- [28:10 - какой стандарт JS используется в курсе](https://youtu.be/bQMTbRWrteU?t=1690) +- [28:35 - откуда начинать курс](https://youtu.be/bQMTbRWrteU?t=1715) +- [29:20 - как посещать старшую группу](https://youtu.be/bQMTbRWrteU?t=1760) +- [31:45 - об основах вёрстки и популярных фреймворках](https://youtu.be/bQMTbRWrteU?t=1905) +- [33:03 - обязательно ли использовать фреймворки](https://youtu.be/bQMTbRWrteU?t=1983) +- [36:15 - почему столь немногим удается сдать экзамен](https://youtu.be/bQMTbRWrteU?t=2175) +- [36:50 - проверка задач для допуска к экзамену и их уровень сложности](https://youtu.be/bQMTbRWrteU?t=2210) +- [37:55 - теоретические вопросы на экзамене, пример](https://youtu.be/bQMTbRWrteU?t=2275) +- [39:35 - знание математики](https://youtu.be/bQMTbRWrteU?t=2375) +- [43:10 - сложные вопросы CS в курсе](https://youtu.be/bQMTbRWrteU?t=2590) +- [46:00 - как происходит проверка задач для допуска к экзамену](https://youtu.be/bQMTbRWrteU?t=2760) +## [Настройка среды: Node.js, npm, git, eslint](https://youtu.be/hSyA7tcNaCE) + +## [Базовый синтаксис JavaScript](https://youtu.be/xJn3k1f4BiM) + +- [00:00:00 Введение](https://youtu.be/xJn3k1f4BiM?t=0) +- [00:03:02 Идентификаторы (identifiers: const, let, arguments, object property)](https://youtu.be/xJn3k1f4BiM?t=182) +- [00:14:41 Циклы (loops)](https://youtu.be/xJn3k1f4BiM?t=881) +- [00:22:10 Функции (functions)](https://youtu.be/xJn3k1f4BiM?t=1330) +- [00:30:35 Объекты (objects) ](https://youtu.be/xJn3k1f4BiM?t=1835) +- [00:33:34 Итерирование по массиву ( for ( ... of ... { } )](https://youtu.be/xJn3k1f4BiM?t=2014) +- [00:39:01 Итерирование по объекту ( for ( ... in ... { } )](https://youtu.be/xJn3k1f4BiM?t=2341) +- [00:42:28 Синтаксис простого кода](https://youtu.be/xJn3k1f4BiM?t=2548) +- [00:55:21 Синтаксис функции](https://youtu.be/xJn3k1f4BiM?t=3321) +- [01:05:38 Синтаксис класса](https://youtu.be/xJn3k1f4BiM?t=3938) +- [01:09:10 Синтаксис расширения класса с помощью функции](https://youtu.be/xJn3k1f4BiM?t=4150) +- [01:14:59 Идентификаторы в виде символов unicode](https://youtu.be/xJn3k1f4BiM?t=4499) +- [01:17:15 Синтаксис комментариев](https://youtu.be/xJn3k1f4BiM?t=4635) +- [01:18:13 Способы объявления переменных ](https://youtu.be/xJn3k1f4BiM?t=4693) +- [01:18:24 Скалярные типы переменных (string, number, boolean)](https://youtu.be/xJn3k1f4BiM?t=4704) +- [01:19:12 Структурные/ссылочные типы переменных (function, array, object)](https://youtu.be/xJn3k1f4BiM?t=4752) +## [Базовый синтаксис JavaScript, продолжение](https://youtu.be/qa-XleqA0JU) + +- [00:01:34 Number (integer / float)](https://youtu.be/qa-XleqA0JU?t=94) +- [00:02:11 String ](https://youtu.be/qa-XleqA0JU?t=131) +- [00:02:15 Boolean](https://youtu.be/qa-XleqA0JU?t=135) +- [00:02:16 Object](https://youtu.be/qa-XleqA0JU?t=136) +- [00:03:08 Array](https://youtu.be/qa-XleqA0JU?t=188) +- [00:04:20 Метод array.push](https://youtu.be/qa-XleqA0JU?t=260) +- [00:04:31 Метод array.unshift](https://youtu.be/qa-XleqA0JU?t=271) +- [00:04:50 Метод array.shift](https://youtu.be/qa-XleqA0JU?t=290) +- [00:05:17 Метод array.pop](https://youtu.be/qa-XleqA0JU?t=317) +- [00:05:55 Оператор typeof](https://youtu.be/qa-XleqA0JU?t=355) +- [00:08:33 Метод Array.isArray](https://youtu.be/qa-XleqA0JU?t=513) +- [00:10:06 Оператор instanceof](https://youtu.be/qa-XleqA0JU?t=606) +- [00:10:48 Undefined](https://youtu.be/qa-XleqA0JU?t=648) +- [00:11:12 Null](https://youtu.be/qa-XleqA0JU?t=672) +- [00:11:55 NaN](https://youtu.be/qa-XleqA0JU?t=715) +- [00:14:18 Infinity](https://youtu.be/qa-XleqA0JU?t=858) +- [00:14:48 Тернарный оператор](https://youtu.be/qa-XleqA0JU?t=888) +- [00:16:15 Функция paseInt](https://youtu.be/qa-XleqA0JU?t=975) +- [00:24:23 Функция paseFloat](https://youtu.be/qa-XleqA0JU?t=1463) +- [00:27:15 Удаление переменных ](https://youtu.be/qa-XleqA0JU?t=1635) +- [00:33:25 Побитовые операторы (Bitwise operators)](https://youtu.be/qa-XleqA0JU?t=2005) +- [00:34:38 Побитовые операции](https://youtu.be/qa-XleqA0JU?t=2078) +- [00:44:30 BigInt](https://youtu.be/qa-XleqA0JU?t=2670) +- [00:56:30 Операторы сравнения ](https://youtu.be/qa-XleqA0JU?t=3390) +- [01:01:20 Очередность операторов (Operator precedence)](https://youtu.be/qa-XleqA0JU?t=3680) +- [01:13:25 Оператор Switch](https://youtu.be/qa-XleqA0JU?t=4405) + +## [Семинар: Базовый синтаксис языка JavaScript](https://youtu.be/PGqjTXQe_qw) + +## [Семинар: автоматическая проверка лабораторных работ](https://youtu.be/M4KpG0LEAyA) + +## [Введение в программирование (2 часть)](https://youtu.be/PzlLXQ3RaDs) + +- [0:00:01 введение](https://youtu.be/PzlLXQ3RaDs?t=1) +- [0:01:45 процедура или подпрограмма / Procedure or Subroutine](https://youtu.be/PzlLXQ3RaDs?t=105) +- [0:06:05 функция / Function](https://youtu.be/PzlLXQ3RaDs?t=365) +- [0:09:27 стек вызовов / Call Stack 0:18:26 Mixed Solution 0:21:42 принцип LIFO](https://youtu.be/PzlLXQ3RaDs?t=567) +- [0:22:09 куча и стек / Heap and Stack](https://youtu.be/PzlLXQ3RaDs?t=1329) +- [0:25:55 рекурсия / Recursion](https://youtu.be/PzlLXQ3RaDs?t=1555) +- [0:27:15 коллекция / Collection](https://youtu.be/PzlLXQ3RaDs?t=1635) +- [0:27:51 массив / Array](https://youtu.be/PzlLXQ3RaDs?t=1671) +- [0:28:18 отладка / Debug](https://youtu.be/PzlLXQ3RaDs?t=1698) +- [0:28:23 компонент / Component](https://youtu.be/PzlLXQ3RaDs?t=1703) +- [0:29:37 модуль / Module 0:30:16 модульность / Modularity 0:33:52 ограничения 0:31:50 заглушки / Stubs](https://youtu.be/PzlLXQ3RaDs?t=1777) +- [0:36:19 библиотека / Library](https://youtu.be/PzlLXQ3RaDs?t=2179) +- [0:37:13 импорт и экспорт идентификаторов / Import and Export Identifiers 0:41:30 новый синтаксис](https://youtu.be/PzlLXQ3RaDs?t=2233) +- [0:45:22 объект или экземпляр / Object or Instance 0:47:08 2 способа задания Instance](https://youtu.be/PzlLXQ3RaDs?t=2722) +- [0:47:47 класс / Class 0:49:16 примеры](https://youtu.be/PzlLXQ3RaDs?t=2867) +- [0:51:30 инстанциирование / Instantiation 0:52:59 примеры](https://youtu.be/PzlLXQ3RaDs?t=3090) +- [0:54:59 область видимости / Scope](https://youtu.be/PzlLXQ3RaDs?t=3299) +- [0:57:05 лексический(ое) контекст (окружение) / Lexical environment](https://youtu.be/PzlLXQ3RaDs?t=3425) +- [0:58:19 объектный контекст функции / Object context: this](https://youtu.be/PzlLXQ3RaDs?t=3499) +- [1:00:33 глобальный контекст / Global context](https://youtu.be/PzlLXQ3RaDs?t=3633) +- [1:04:35 монады](https://youtu.be/PzlLXQ3RaDs?t=3875) +- [1:09:00 парадигмы программирования](https://youtu.be/PzlLXQ3RaDs?t=4140) +- [1:12:05 лямбда-функция](https://youtu.be/PzlLXQ3RaDs?t=4325) +- [1:12:28 фрейм](https://youtu.be/PzlLXQ3RaDs?t=4348) +- [1:14:46 строка в свойстве объекта](https://youtu.be/PzlLXQ3RaDs?t=4486) +- [1:16:21 класс и объект](https://youtu.be/PzlLXQ3RaDs?t=4581) +- [1:16:47 класс и прототип](https://www.youtube.com/watch?v=PzlLXQ3RaDs&t=4607) +- [1:17:37 аллокирование значений в куче и стеке](https://youtu.be/PzlLXQ3RaDs?t=4607) +- [1:18:43 сборщик мусора](https://youtu.be/PzlLXQ3RaDs?t=4723) +- [1:20:29 терминология на английском и русском](https://youtu.be/PzlLXQ3RaDs?t=4829) + +## [Функции, лямбды (стрелочные функции), контексты, замыкания в JavaScript](https://youtu.be/pn5myCmpV2U) + +- [00:00:00 Введение ](https://youtu.be/pn5myCmpV2U?t=0) +- [00:11:22 Функция объявление (Declaration)](https://youtu.be/pn5myCmpV2U?t=682) +- [00:12:46 Функция выражение (Expression)](https://youtu.be/pn5myCmpV2U?t=766) +- [00:16:07 Лямбда-выражение (Lambda expression) или функция-стрелка (Arrow function) ](https://youtu.be/pn5myCmpV2U?t=967) +- [00:16:43 Лямбда-функция (Lambda function) ](https://youtu.be/pn5myCmpV2U?t=1003) +- [00:18:45 Область видимости (Scope)](https://youtu.be/pn5myCmpV2U?t=1125) +- [00:25:00 Функции, как абстракции](https://youtu.be/pn5myCmpV2U?t=1500) +- [00:26:43 Методы функции (name, length, toString( ) )](https://youtu.be/pn5myCmpV2U?t=1603) +- [00:31:26 Значения по умолчанию у функции ](https://youtu.be/pn5myCmpV2U?t=1886) +- [00:36:46 Rest-оператор (...args)](https://youtu.be/pn5myCmpV2U?t=2206) +- [00:41:49 Способ определения функции, через new Function](https://youtu.be/pn5myCmpV2U?t=2509) +- [00:44:46 Функции внутри объекта](https://youtu.be/pn5myCmpV2U?t=2686) +- [00:50:42 Обращение к полям объекта из привязанной функции, через this](https://youtu.be/pn5myCmpV2U?t=3042) +- [00:55:24 История синтаксиса создания контекстов, через самовызывающиеся функции ( IIFE)](https://youtu.be/pn5myCmpV2U?t=3324) +- [00:58:30 Методы функции, наследуемой от объекта (call, apply)](https://youtu.be/pn5myCmpV2U?t=3510) +- [01:00:53 Комментирование функций](https://youtu.be/pn5myCmpV2U?t=3653) +- [01:01:27 Задание декомпозиции функции](https://youtu.be/pn5myCmpV2U?t=3687) +- [01:04:24 Замыкание: context ](https://youtu.be/pn5myCmpV2U?t=3864) +- [01:08:41 Замыкание: chainning ](https://youtu.be/pn5myCmpV2U?t=4121) +- [01:11:55 Замыкание: summator ](https://youtu.be/pn5myCmpV2U?t=4315) +- [01:14:16 Замыкание: recursion](https://youtu.be/pn5myCmpV2U?t=4456) + +## [Массивы, объекты, классы, прототипы в JavaScript](https://youtu.be/VBMGnAPfmsY) + +- [00:00:00 Объекты](https://youtu.be/VBMGnAPfmsY?t=0) +- [00:11:01 Массивы](https://youtu.be/VBMGnAPfmsY?t=661) +- [00:13:29 Cериализация объекта ](https://youtu.be/VBMGnAPfmsY?t=809) +- [00:15:46 Cериализация массива ](https://youtu.be/VBMGnAPfmsY?t=946) +- [00:19:20 Методы array](https://youtu.be/VBMGnAPfmsY?t=1160) +- [00:20:22 Циклы ](https://youtu.be/VBMGnAPfmsY?t=1222) +- [00:21:16 Цикл for-in-object ](https://youtu.be/VBMGnAPfmsY?t=1276) +- [00:22:02 Цикл for-in-array](https://youtu.be/VBMGnAPfmsY?t=1322) +- [00:24:10 Цикл for-of-array ](https://youtu.be/VBMGnAPfmsY?t=1450) +- [00:25:05 Метод array.forEach](https://youtu.be/VBMGnAPfmsY?t=1505) +- [00:29:10 Метод array.map](https://youtu.be/VBMGnAPfmsY?t=1750) +- [00:33:59 Итерация матрицы, через for-of-array](https://youtu.be/VBMGnAPfmsY?t=2039) +- [00:38:38 Итерация матрицы, через array.forEach](https://youtu.be/VBMGnAPfmsY?t=2318) +- [00:39:22 Итерация матрицы, через for-in-array](https://youtu.be/VBMGnAPfmsY?t=2362) +- [00:39:45 Метод array.reduce](https://youtu.be/VBMGnAPfmsY?t=2385) +- [00:44:39 Методы объекта](https://youtu.be/VBMGnAPfmsY?t=2679) +- [00:46:38 Прототип](https://youtu.be/VBMGnAPfmsY?t=2798) +- [00:53:32 Класс ](https://youtu.be/VBMGnAPfmsY?t=3212) +- [00:56:04 Связывание методов с объектом, при помощи замыкания](https://youtu.be/VBMGnAPfmsY?t=3364) +- [01:00:08 Связывание методов с объектом, при помощи метода bind](https://youtu.be/VBMGnAPfmsY?t=3608) +- [01:03:19 Пример абстракции, при помощи замыкания](https://youtu.be/VBMGnAPfmsY?t=3799) +- [01:11:05 Пример абстракции, при помощи прототипа](https://youtu.be/VBMGnAPfmsY?t=4265) +- [01:12:30 Пример абстракции, при помощи класса](https://youtu.be/VBMGnAPfmsY?t=4350) +- [01:13:08 Наследование через синтаксис прототипов](https://youtu.be/VBMGnAPfmsY?t=4388) +- [01:18:50 Наследование через синтаксис классов ](https://youtu.be/VBMGnAPfmsY?t=4730) +- [01:21:05 Связывание объекта с методом класса при помощи прототипа ](https://youtu.be/VBMGnAPfmsY?t=4865) +- [01:23:52 Присваивание методов внутри конструктора, при прототипном подходе ](https://youtu.be/VBMGnAPfmsY?t=5032) +- [01:25:10 Get/Set класса ](https://youtu.be/VBMGnAPfmsY?t=5110) +- [01:27:00 Пример](https://youtu.be/VBMGnAPfmsY?t=5220) + +## [Языки программирования: обзор, сравнение, выбор](https://youtu.be/enHA1CRkJe0) + +- [0:00:02 обзорная лекция о классификации ЯП](https://youtu.be/enHA1CRkJe0?t=2) +- [0:00:53 типизация: статическая / динамическая](https://youtu.be/enHA1CRkJe0?t=53) +- [0:07:37 сильная / слабая || строгая / нестрогая](https://youtu.be/enHA1CRkJe0?t=457) +- [0:10:08 явная / неявная](https://youtu.be/enHA1CRkJe0?t=608) +- [0:13:58 утиная 0:18:26 протоколы](https://youtu.be/enHA1CRkJe0?t=838) +- [0:20:36 ниже и ближе к машине / выше и ближе к человеку](https://youtu.be/enHA1CRkJe0?t=1236) +- [0:32:20 сравнение asm и машинного кода](https://youtu.be/enHA1CRkJe0?t=1940) +- [0:39:38 сравнение asm и js](https://youtu.be/enHA1CRkJe0?t=2378) +- [0:42:47 функции и типы 1 класса](https://youtu.be/enHA1CRkJe0?t=2567) +- [0:44:39 распространённость](https://youtu.be/enHA1CRkJe0?t=2679) +- [0:45:47 скорость, читаемость](https://youtu.be/enHA1CRkJe0?t=2747) +- [0:48:21 владение правами / влияние на ЯП](https://youtu.be/enHA1CRkJe0?t=2901) +- [0:51:13 специализация](https://youtu.be/enHA1CRkJe0?t=3073) +- [0:53:13 наследственность](https://youtu.be/enHA1CRkJe0?t=3193) +- [0:56:33 инструментарий](https://youtu.be/enHA1CRkJe0?t=3393) +- [0:58:20 поддержка](https://youtu.be/enHA1CRkJe0?t=3500) +- [1:02:58 скорость развития](https://youtu.be/enHA1CRkJe0?t=3778) +- [1:04:12 системное программирование](https://youtu.be/enHA1CRkJe0?t=3852) +- [1:05:51 оконные приложения](https://youtu.be/enHA1CRkJe0?t=3951) +- [1:06:27 встраиваемые системы и автоматизация](https://youtu.be/enHA1CRkJe0?t=3987) +- [1:07:02 базы данных](https://youtu.be/enHA1CRkJe0?t=4022) +- [1:07:45 сетевые сервера](https://youtu.be/enHA1CRkJe0?t=4065) +- [1:09:03 вычисления](https://youtu.be/enHA1CRkJe0?t=4143) +- [1:10:45 ИИ](https://youtu.be/enHA1CRkJe0?t=4245) +- [1:11:52 параллельные вычисления, веб](https://youtu.be/enHA1CRkJe0?t=4312) +- [1:12:38 скрипты](https://youtu.be/enHA1CRkJe0?t=4358) +- [1:13:36 тестирование](https://youtu.be/enHA1CRkJe0?t=4416) +- [1:14:20 мобильные платформы](https://youtu.be/enHA1CRkJe0?t=4460) +- [1:16:10 игры, графика](https://youtu.be/enHA1CRkJe0?t=4570) + +## [JavaScript: Ответы на вопросы](https://youtu.be/wqkQ6eslyzY) + +- [0:00:02 введение](https://youtu.be/wqkQ6eslyzY?t=2) +- [0:00:41 разделение ЯП по модели работы с памятью](https://youtu.be/wqkQ6eslyzY?t=41) +- [0:08:32 почему надо использовать const, реже let и избегать var](https://youtu.be/wqkQ6eslyzY?t=512) +- [0:17:43 + и - утиной типизации](https://youtu.be/wqkQ6eslyzY?t=1063) +- [0:30:03 примеры ЯП с разной типизацией](https://youtu.be/wqkQ6eslyzY?t=1803) +- [0:32:29 чем выше ЯП, тем он медленнее?](https://youtu.be/wqkQ6eslyzY?t=1949) +- [0:34:15 почему бы js не компилировать напрямую в машинный код](https://youtu.be/wqkQ6eslyzY?t=2055) +- [0:35:37 скорость и производительность ЯП](https://youtu.be/wqkQ6eslyzY?t=2137) +- [0:40:47 константы и ключевое слово const](https://youtu.be/wqkQ6eslyzY?t=2447) +- [0:45:48 зачем учить именно js](https://youtu.be/wqkQ6eslyzY?t=2748) +- [0:59:28 typescript - js с типами? Развитость инфраструктуры ts](https://youtu.be/wqkQ6eslyzY?t=3568) + +## [Частичное применение и каррирование в JavaScript](https://youtu.be/ND8KQ5xjk7o) + +- [00:00:00 Замыкание](https://youtu.be/ND8KQ5xjk7o?t=0) +- [00:04:54 Лямбда- функция](https://youtu.be/ND8KQ5xjk7o?t=294) +- [00:06:06 Метод bind](https://youtu.be/ND8KQ5xjk7o?t=366) +- [00:08:30 Абстрагированный пример функции](https://youtu.be/ND8KQ5xjk7o?t=510) +- [00:13:42 Абстрагированный пример функции (расширение)](https://youtu.be/ND8KQ5xjk7o?t=822) +- [00:15:47 Неправильная реализация каррирования](https://youtu.be/ND8KQ5xjk7o?t=947) +- [00:22:22 Правильная реализация каррирования](https://youtu.be/ND8KQ5xjk7o?t=1342) +- [00:28:54 Правильная реализация каррирования (расширение)](https://youtu.be/ND8KQ5xjk7o?t=1734) +- [00:31:41 Функциональные абстракции (superposition)](https://youtu.be/ND8KQ5xjk7o?t=1901) +- [00:38:02 Функциональные абстракции, с сохранением выражений (composition)](https://youtu.be/ND8KQ5xjk7o?t=2282) +- [00:45:05 Композиция с 2 функциями](https://youtu.be/ND8KQ5xjk7o?t=2705) +- [00:46:05 Композиция с n - функциями, при помощи метода reduce](https://youtu.be/ND8KQ5xjk7o?t=2765) +- [00:51:25 Композиция с n - функциями, при помощи цикла](https://youtu.be/ND8KQ5xjk7o?t=3085) +- [00:54:29 Композиция с n - функциями, при помощи рекурсии](https://youtu.be/ND8KQ5xjk7o?t=3269) +- [00:57:40 Композиция асинхронных функций](https://youtu.be/ND8KQ5xjk7o?t=3460) +- [01:01:27 Обобщение](https://youtu.be/ND8KQ5xjk7o?t=3687) + +## [Функции высшего порядка, колбеки, события на JavaScript](https://youtu.be/1vqATwbGHnc) + +- [00:00:00 Определение](https://youtu.be/1vqATwbGHnc?t=0) +- [00:02:03 Математическая функция](https://youtu.be/1vqATwbGHnc?t=123) +- [00:05:57 Функция обратного вызова (callback) ](https://youtu.be/1vqATwbGHnc?t=357) +- [00:09:33 Замыкание](https://youtu.be/1vqATwbGHnc?t=573) +- [00:10:51 Цепочка вызовов ](https://youtu.be/1vqATwbGHnc?t=651) +- [00:12:40 Сохранение кэша с помощью замыкания](https://youtu.be/1vqATwbGHnc?t=760) +- [00:18:29 Добавление функции поведение логирования](https://youtu.be/1vqATwbGHnc?t=1109) +- [00:21:45 Обобщение](https://youtu.be/1vqATwbGHnc?t=1305) +- [00:22:45 Сallback](https://youtu.be/1vqATwbGHnc?t=1365) +- [00:25:32 Сallback асинхронной функции считывание файла](https://youtu.be/1vqATwbGHnc?t=1532) +- [00:28:36 Сallback именованный](https://youtu.be/1vqATwbGHnc?t=1716) +- [00:33:01 Сallback-timer ](https://youtu.be/1vqATwbGHnc?t=1981) +- [00:36:20 Сallback-timer-curry](https://youtu.be/1vqATwbGHnc?t=2180) +- [00:38:59 Listener](https://youtu.be/1vqATwbGHnc?t=2339) +- [00:41:10 Listener-timer](https://youtu.be/1vqATwbGHnc?t=2470) +- [00:46:59 Event](https://youtu.be/1vqATwbGHnc?t=2819) +- [00:53:45 Event-imitter](https://youtu.be/1vqATwbGHnc?t=3225) +- [00:57:48 Deferred object (отложенный объект)](https://youtu.be/1vqATwbGHnc?t=3468) +- [01:01:31 Errors](https://youtu.be/1vqATwbGHnc?t=3691) + +## [Работа со строками, шаблонами и юникодом в JavaScript](https://youtu.be/GcopcHQkA8M) + +- [00:00:00 Unicode строки](https://youtu.be/GcopcHQkA8M?t=0) +- [00:12:07 Обычные строки](https://youtu.be/GcopcHQkA8M?t=727) +- [00:17:03 Методы строки ](https://youtu.be/GcopcHQkA8M?t=1023) +- [00:23:09 Модификация строк ](https://youtu.be/GcopcHQkA8M?t=1389) +- [00:28:00 Получение подстроки в строке ](https://youtu.be/GcopcHQkA8M?t=1680) +- [00:34:45 Polyffill ](https://youtu.be/GcopcHQkA8M?t=2085) +- [00:37:54 Методы padEnd и padStart ](https://youtu.be/GcopcHQkA8M?t=2274) +- [00:40:45 Добавление функции для шаблонизирующей строки](https://youtu.be/GcopcHQkA8M?t=2445) +- [00:44:27 Пример ](https://youtu.be/GcopcHQkA8M?t=2667) +- [00:48:29 Библиотека Concolor.js](https://youtu.be/GcopcHQkA8M?t=2909) + +## [Регулярные выражения и парсинг в JavaScript](https://youtu.be/-ef2E0ozxao) + +- [00:00:00 Введение](https://youtu.be/-ef2E0ozxao?t=0) +- [00:10:30 Синтаксис регулярных выражений ](https://youtu.be/-ef2E0ozxao?t=630) +- [00:12:54 Задание регулярного выражения ](https://youtu.be/-ef2E0ozxao?t=774) +- [00:30:38 RegExp ](https://youtu.be/-ef2E0ozxao?t=1838) +- [00:38:11 Метод match ](https://youtu.be/-ef2E0ozxao?t=2291) +- [00:46:48 Метод split](https://youtu.be/-ef2E0ozxao?t=2808) +- [00:49:28 Метод replace ](https://youtu.be/-ef2E0ozxao?t=2968) +- [00:50:43 Метод replace с аргументом функции ](https://youtu.be/-ef2E0ozxao?t=3043) +- [00:53:28 Метод search ](https://youtu.be/-ef2E0ozxao?t=3208) +- [00:55:05 Обобщение](https://youtu.be/-ef2E0ozxao?t=3305) + +## [Примеси, обертки, декораторы, мемоизация в JavaScript](https://youtu.be/oRQ0kQr1N-U) + +- [00:00:00 Синхронная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=0) +- [00:02:55 Синхронная универсальная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=175) +- [00:08:28 Асинхронная универсальная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=508) +- [00:15:50 Синхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/oRQ0kQr1N-U?t=950) +- [00:22:45 Асинхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/oRQ0kQr1N-U?t=1365) +- [00:25:38 Функция-обертка, которая ограничивает вызов функции до одного вызова (once) ](https://youtu.be/oRQ0kQr1N-U?t=1538) +- [00:27:36 Функция-обертка, которая ограничивает вызов функции до n-го вызова (limit)](https://youtu.be/oRQ0kQr1N-U?t=1656) +- [00:29:50 Функция-обертка, которая отменяет вызов функции (cancel)](https://youtu.be/oRQ0kQr1N-U?t=1790) +- [00:32:29 Функция-обертка с методами timeout, limit, cancel](https://youtu.be/oRQ0kQr1N-U?t=1949) +- [00:39:03 Функция-обертка с методами timeout, limit, cancel (оптимизированная)](https://youtu.be/oRQ0kQr1N-U?t=2343) +- [00:42:28 Функция-обертка, которая ограничивает один вызов за 200 мс (throttle)](https://youtu.be/oRQ0kQr1N-U?t=2548) +- [00:45:47 Примесь поля через точку ](https://youtu.be/oRQ0kQr1N-U?t=2747) +- [00:51:35 Примесь поля через функцию extend](https://youtu.be/oRQ0kQr1N-U?t=3095) +- [00:57:35 Примесь поля через object.assign( )](https://youtu.be/oRQ0kQr1N-U?t=3455) +- [00:59:18 Примесь поведения ](https://youtu.be/oRQ0kQr1N-U?t=3558) +- [01:02:23 Примесь изменения класса](https://youtu.be/oRQ0kQr1N-U?t=3743) +- [01:06:50 Определение](https://youtu.be/oRQ0kQr1N-U?t=4010) +- [01:07:30 Реализация простой мемоизации ](https://youtu.be/oRQ0kQr1N-U?t=4050) +- [01:14:43 Реализация простой мемоизации с проверкой скорости ](https://youtu.be/oRQ0kQr1N-U?t=4483) +- [01:20:43 Удаление накопленного кэша ](https://youtu.be/oRQ0kQr1N-U?t=4843) +- [01:25:35 Асинхронная мемоизация ](https://youtu.be/oRQ0kQr1N-U?t=5135) +- [01:31:10 Преобразование аргументов и ключей в hash-функцию](https://youtu.be/oRQ0kQr1N-U?t=5470) +- [01:33:32 Реализация сложной мемоизации](https://youtu.be/oRQ0kQr1N-U?t=5612) + +## [Консоль и командная строка в JavaScript и Node.js](https://youtu.be/5aSZyKi5BmE) + +- [1:20 console](https://youtu.be/5aSZyKi5BmE?t=80) +- [16:00 readline](https://youtu.be/5aSZyKi5BmE?t=960) +- [21:35 cli](https://youtu.be/5aSZyKi5BmE?t=1295) +- [31:15 делаем красивый login screen](https://youtu.be/5aSZyKi5BmE?t=1875) + +## [Чеининг функций и объектов, обработка ошибок в JavaScript](https://youtu.be/PfuEfIiLX34) + +- [00:00:00 Введение ](https://youtu.be/PfuEfIiLX34?t=0) +- [00:01:10 Чеининг через синтаксис вызова функций ](https://youtu.be/PfuEfIiLX34?t=70) +- [00:02:12 Prototype ](https://youtu.be/PfuEfIiLX34?t=132) +- [00:05:45 Сlass](https://youtu.be/PfuEfIiLX34?t=345) +- [00:06:11 Functor](https://youtu.be/PfuEfIiLX34?t=371) +- [00:11:54 Mutable](https://youtu.be/PfuEfIiLX34?t=714) +- [00:16:34 Iterator](https://youtu.be/PfuEfIiLX34?t=994) +- [00:26:18 Promise ](https://youtu.be/PfuEfIiLX34?t=1578) +- [00:26:35 Test](https://youtu.be/PfuEfIiLX34?t=1595) +- [00:37:08 Compare ](https://youtu.be/PfuEfIiLX34?t=2228) +- [00:39:45 Benchmark](https://youtu.be/PfuEfIiLX34?t=2385) +- [00:40:48 Запуск и анализ тестов ](https://youtu.be/PfuEfIiLX34?t=2448) +- [01:03:48 Первый способ возвращение ошибок в синхронном коде ](https://youtu.be/PfuEfIiLX34?t=3828) +- [01:09:24 Второй способ возвращение ошибок в синхронном коде ](https://youtu.be/PfuEfIiLX34?t=4164) +- [01:12:26 Возвращение ошибок в асинхронном коде ](https://youtu.be/PfuEfIiLX34?t=4346) +- [01:16:14 Корректное возвращение ошибок ](https://youtu.be/PfuEfIiLX34?t=4574) +- [01:20:03 Обработка ошибок c promise ](https://youtu.be/PfuEfIiLX34?t=4803) +- [01:23:58 Обработка ошибок c async-await](https://youtu.be/PfuEfIiLX34?t=5038) + +## [Таймеры, таймауты, EventEmitter в JavaScript и Node.js](https://youtu.be/LK2jveAnRNg) + +- [0:30 callback sync/async](https://youtu.be/LK2jveAnRNg?t=30) +- [1:35 временная задержка sleep.js](https://youtu.be/LK2jveAnRNg?t=95) +- [5:35 await-sleep.js](https://youtu.be/LK2jveAnRNg?t=335) +- [8:40 sleep-then.js](https://youtu.be/LK2jveAnRNg?t=520) +- [9:30 order.js](https://youtu.be/LK2jveAnRNg?t=570) +- [18:38 precision.js](https://youtu.be/LK2jveAnRNg?t=1118) +- [22:13 blocking.js](https://youtu.be/LK2jveAnRNg?t=1333) +- [22:50 timers.js](https://youtu.be/LK2jveAnRNg?t=1370) +- [29:35 ref-unref.js](https://youtu.be/LK2jveAnRNg?t=1775) +- [32:05 enroll.js](https://youtu.be/LK2jveAnRNg?t=1925) +- [34:57 eventloop.txt](https://youtu.be/LK2jveAnRNg?t=2097) +- [37:37 eventEmitter](https://youtu.be/LK2jveAnRNg?t=2257) +- [44:32 simple.js](https://youtu.be/LK2jveAnRNg?t=2672) +- [47:48 usage.js](https://youtu.be/LK2jveAnRNg?t=2868) +- [48:30 enhanced.js](https://youtu.be/LK2jveAnRNg?t=2910) +- [50:18 star-fix.js](https://youtu.be/LK2jveAnRNg?t=3018) +- [51:10 usage.js](https://youtu.be/LK2jveAnRNg?t=3070) +- [53:15 closure.js](https://youtu.be/LK2jveAnRNg?t=3195) +- [54:50 fp.js](https://youtu.be/LK2jveAnRNg?t=3290) +- [57:10 methods.js](https://youtu.be/LK2jveAnRNg?t=3430) +- [1:06:35 min.js](https://youtu.be/LK2jveAnRNg?t=3995) +- [1:12:31 prod.js](https://youtu.be/LK2jveAnRNg?t=4351) + +## [Итерирование, циклы и итераторы в JavaScript](https://youtu.be/lq3b5_UGJas) + +- [00:00:00 Цикл for](https://youtu.be/lq3b5_UGJas?t=0) +- [00:02:45 Цикл while](https://youtu.be/lq3b5_UGJas?t=165) +- [00:03:16 Цикл do while ](https://youtu.be/lq3b5_UGJas?t=196) +- [00:03:33 Цикл for in object ](https://youtu.be/lq3b5_UGJas?t=213) +- [00:04:40 Цикл for in array](https://youtu.be/lq3b5_UGJas?t=280) +- [00:06:44 Цикл for of](https://youtu.be/lq3b5_UGJas?t=404) +- [00:08:45 Оператор break](https://youtu.be/lq3b5_UGJas?t=525) +- [00:10:13 Оператор continue](https://youtu.be/lq3b5_UGJas?t=613) +- [00:12:12 Итерирование по массиву методом forEach](https://youtu.be/lq3b5_UGJas?t=732) +- [00:15:10 Итерирование по массиву методом map ](https://youtu.be/lq3b5_UGJas?t=910) +- [00:21:23 Итерирование по двухмерному массиву (мatrix)](https://youtu.be/lq3b5_UGJas?t=1283) +- [00:25:38 Итерирование по двухмерному массиву (мatrix) методом forEach](https://youtu.be/lq3b5_UGJas?t=1538) +- [00:26:08 Итерирование массива методом reduce](https://youtu.be/lq3b5_UGJas?t=1568) +- [00:28:49 Итерирование по объекту ](https://youtu.be/lq3b5_UGJas?t=1729) +- [00:37:32 Обратный итератор ](https://youtu.be/lq3b5_UGJas?t=2252) +- [00:40:42 Асинхронный итератор](https://youtu.be/lq3b5_UGJas?t=2442) + +## [Архитектурный подход к программированию](https://youtu.be/d_vyO2CkiOc) + +- [00:00:00 Когда нужна архитектура](https://youtu.be/d_vyO2CkiOc?t=0) +- [00:06:07 Принятие решений](https://youtu.be/d_vyO2CkiOc?t=367) +- [00:09:58 Типы связывания](https://youtu.be/d_vyO2CkiOc?t=598) +- [00:20:00 Ошибки](https://youtu.be/d_vyO2CkiOc?t=1200) +- [00:27:15 Принятие решений](https://youtu.be/d_vyO2CkiOc?t=1635) +- [00:37:05 Эволюция архитектурных решений](https://youtu.be/d_vyO2CkiOc?t=2225) +- [00:58:13 Схема современной архитектуры](https://youtu.be/d_vyO2CkiOc?t=3493) +- [01:01:40 субд в браузере](https://youtu.be/d_vyO2CkiOc?t=3700) +- [01:05:20 Альтернативные варианты](https://youtu.be/d_vyO2CkiOc?t=3920) +- [01:12:20 Как на самом деле](https://youtu.be/d_vyO2CkiOc?t=4340) +- [01:13:45 Архитектура мечты](https://youtu.be/d_vyO2CkiOc?t=4425) +- [01:16:45 Современные возможности и требования ](https://youtu.be/d_vyO2CkiOc?t=4605) +- [01:25:20 Топологии](https://youtu.be/d_vyO2CkiOc?t=5120) +- [01:30:45 Итог](https://youtu.be/d_vyO2CkiOc?t=5445) + +## [Функциональное программирование на JavaScript](https://youtu.be/0JxSs_GcvbQ) + +## [Реактивное программирование на JavaScript](https://youtu.be/7MH8-qQc-48) + +- [0:00 введение](https://youtu.be/7MH8-qQc-48?t=0) +- [3:00 imperative.js](https://youtu.be/7MH8-qQc-48?t=180) +- [4:00 set-get.js](https://youtu.be/7MH8-qQc-48?t=240) +- [7:15 proxy.js](https://youtu.be/7MH8-qQc-48?t=435) +- [23:07 observer.js](https://youtu.be/7MH8-qQc-48?t=1387) + +## [Асинхронное программирование на callback`ах в JavaScript](https://youtu.be/z8Hg6zgi3yQ) + +- [1:20 пример callback функции](https://youtu.be/z8Hg6zgi3yQ?t=80) +- [2:40 пример последовательного исполнения callback функций](https://youtu.be/z8Hg6zgi3yQ?t=160) +- [5:52 пример параллельного исполнения async функций c использованием wrapAsync](https://youtu.be/z8Hg6zgi3yQ?t=352) +- [15:18 пример последовательного исполнения async функций c использованием wrapAsync](https://youtu.be/z8Hg6zgi3yQ?t=918) +- [19:05 chain исполнение async функций](https://youtu.be/z8Hg6zgi3yQ?t=1145) +- [41:16 где можно встретить асинхронные функции](https://youtu.be/z8Hg6zgi3yQ?t=2476) + +## [Проекции и отображения наборов данных в JavaScript](https://youtu.be/lwJCq9inky8) + +- [00:00:00 Введение ](https://youtu.be/lwJCq9inky8?t=0) +- [00:01:50 Простая проекция набора данных ](https://youtu.be/lwJCq9inky8?t=110) +- [00:09:23 Расширенная проекция набора данных ](https://youtu.be/lwJCq9inky8?t=563) +- [00:19:00 Расширенная проекция набора данных с кэшированием списка ключей](https://youtu.be/lwJCq9inky8?t=1140) +- [00:20:27 Оптимизация проекции набора данных с помощью императивного программирования ](https://youtu.be/lwJCq9inky8?t=1227) +- [00:23:11 Линзы из функционального программирования ](https://youtu.be/lwJCq9inky8?t=1391) +- [00:32:29 Сложная проекция набора данных ( проекция изнутри и снаружи ) ](https://youtu.be/lwJCq9inky8?t=1949) +- [00:39:08 Сложная проекция набора данных с помощью декларативного программирования ](https://youtu.be/lwJCq9inky8?t=2348) +- [00:41:57 Оптимизация сложной проекции ](https://youtu.be/lwJCq9inky8?t=2517) +- [00:51:36 Синтаксис фильтрации ](https://youtu.be/lwJCq9inky8?t=3096) +- [00:53:25 Вывод ](https://youtu.be/lwJCq9inky8?t=3205) +- [00:58:08 Оптимизация](https://youtu.be/lwJCq9inky8?t=3488) +- [01:00:00 Обобщение](https://youtu.be/lwJCq9inky8?t=3600) + +## [Коллекции, множества, хештаблицы в JavaScript](https://youtu.be/hN0wsq5LNOc) + +- [00:00:00 Введение](https://youtu.be/hN0wsq5LNOc?t=0) +- [00:01:35 Массивы ](https://youtu.be/hN0wsq5LNOc?t=95) +- [00:01:56 Склеивание массива методом concat ](https://youtu.be/hN0wsq5LNOc?t=116) +- [00:02:02 Склеивание массива оператором spread ](https://youtu.be/hN0wsq5LNOc?t=122) +- [00:03:17 Объекты ](https://youtu.be/hN0wsq5LNOc?t=197) +- [00:03:28 Склеивание объектов методом object.assign ](https://youtu.be/hN0wsq5LNOc?t=208) +- [00:04:01 Склеивание объектов оператором spread ](https://youtu.be/hN0wsq5LNOc?t=241) +- [00:04:38 Символический тип ](https://youtu.be/hN0wsq5LNOc?t=278) +- [00:06:50 Сохранение коллекции в файл ](https://youtu.be/hN0wsq5LNOc?t=410) +- [00:08:45 Использование конструированного map ](https://youtu.be/hN0wsq5LNOc?t=525) +- [00:14:29 Использование встроенного map ](https://youtu.be/hN0wsq5LNOc?t=869) +- [00:15:01 Отличия конструированного и встроенного map](https://youtu.be/hN0wsq5LNOc?t=901) +- [00:16:49 Способы итерации по map ](https://youtu.be/hN0wsq5LNOc?t=1009) +- [00:18:15 Построение индексов помощью map](https://youtu.be/hN0wsq5LNOc?t=1095) +- [00:23:15 WeakMap](https://youtu.be/hN0wsq5LNOc?t=1395) +- [00:27:55 Отдача значения без ключа ](https://youtu.be/hN0wsq5LNOc?t=1675) +- [00:29:15 Хранение уникальных значений ](https://youtu.be/hN0wsq5LNOc?t=1755) +- [00:33:32 Операции со массивами ](https://youtu.be/hN0wsq5LNOc?t=2012) +- [00:39:48 Операции над множествами ](https://youtu.be/hN0wsq5LNOc?t=2388) +- [00:42:32 WeakSet ](https://youtu.be/hN0wsq5LNOc?t=2552) +- [00:47:15 Обобщение](https://youtu.be/hN0wsq5LNOc?t=2835) + +## [Неблокирующее асинхронное итерирование в JavaScript](https://youtu.be/wYA2cIRYLoA) + +- [1:02 блокирующее итерирование по массиву](https://youtu.be/wYA2cIRYLoA?t=62) +- [3:24 блокирующее итерирование с помощью for await](https://youtu.be/wYA2cIRYLoA?t=204) +- [4:47 неблокирующее итерирование с помощью setTimeout](https://youtu.be/wYA2cIRYLoA?t=287) +- [6:45 неблокирующее итерирование с помощью for await](https://youtu.be/wYA2cIRYLoA?t=405) +- [8:20 неблокирующее итерирование без задержки](https://youtu.be/wYA2cIRYLoA?t=500) +- [13:00 неблокирующее итерирование без задержки с помощью for await](https://youtu.be/wYA2cIRYLoA?t=780) +- [19:30 использование асинхронного итерирования для обычных массивов](https://youtu.be/wYA2cIRYLoA?t=1170) + +## [Структуры данных: списки, стек, очередь, дэк в JavaScript](https://youtu.be/9KvA4hDDSjk) + +- [00:00:00 Идея структуры данных](https://youtu.be/9KvA4hDDSjk?t=0) +- [00:02:27 Списки на прототипах ( абстракция элемента ) ](https://youtu.be/9KvA4hDDSjk?t=147) +- [00:06:23 Списки на объектах ](https://youtu.be/9KvA4hDDSjk?t=383) +- [00:07:28 Списки на замыканиях](https://youtu.be/9KvA4hDDSjk?t=448) +- [00:10:56 Списки на объектах ( абстракция элемента и списка ) ](https://youtu.be/9KvA4hDDSjk?t=656) +- [00:18:22 Списки на классах](https://youtu.be/9KvA4hDDSjk?t=1102) +- [00:21:08 Стек на прототипах ( двух-связанный)](https://youtu.be/9KvA4hDDSjk?t=1268) +- [00:28:17 Стек на классах (односвязный)](https://youtu.be/9KvA4hDDSjk?t=1697) +- [00:29:55 Очередь](https://youtu.be/9KvA4hDDSjk?t=1795) +- [00:34:26 Дэк](https://youtu.be/9KvA4hDDSjk?t=2066) + +## [Proxy и Symbol в JavaScript](https://youtu.be/UjZjSDyi9AM) + +- [00:00:00 Определение Proxy](https://youtu.be/UjZjSDyi9AM?t=0) +- [00:01:20 Обращение к свойствам объекта, находящегося внутри proxy](https://youtu.be/UjZjSDyi9AM?t=80) +- [00:04:10 Доступ к состоянию объекта через Getter и Setter ](https://youtu.be/UjZjSDyi9AM?t=250) +- [00:05:13 Доступ к состоянию объекта через Proxy ](https://youtu.be/UjZjSDyi9AM?t=313) +- [00:07:40 Проверка наличие свойств ](https://youtu.be/UjZjSDyi9AM?t=460) +- [00:11:22 Удаление свойств](https://youtu.be/UjZjSDyi9AM?t=682) +- [00:13:26 Обращение к аргументам функции, находящегося внутри proxy ](https://youtu.be/UjZjSDyi9AM?t=806) +- [00:15:30 Другие Proxy обработчики (Proxy handler )](https://youtu.be/UjZjSDyi9AM?t=930) +- [00:19:00 Proxy.revocable ](https://youtu.be/UjZjSDyi9AM?t=1140) +- [00:20:43 Определение Symbol ](https://youtu.be/UjZjSDyi9AM?t=1243) +- [00:23:00 Вывод и сравнение Symbol ](https://youtu.be/UjZjSDyi9AM?t=1380) +- [00:25:10 Type](https://youtu.be/UjZjSDyi9AM?t=1510) +- [00:29:51 Symbol.for](https://youtu.be/UjZjSDyi9AM?t=1791) +- [00:34:45 Symbol.iterator ](https://youtu.be/UjZjSDyi9AM?t=2085) +- [00:43:52 Symbol.toPrimitive](https://youtu.be/UjZjSDyi9AM?t=2632) +- [00:47:00 hideSymbol](https://youtu.be/UjZjSDyi9AM?t=2820) + +## [Сериализация и десериализация в JavaScript и Node.js](https://youtu.be/GtKPniOEzh8) + +- [00:00:00 Введение ](https://youtu.be/GtKPniOEzh8?t=0) +- [00:01:50 Виды сериализации ](https://youtu.be/GtKPniOEzh8?t=110) +- [00:02:45 Сериализатор console.dir ](https://youtu.be/GtKPniOEzh8?t=165) +- [00:03:45 Cериализатор CSV](https://youtu.be/GtKPniOEzh8?t=225) +- [00:05:42 Сериализатор JSON ](https://youtu.be/GtKPniOEzh8?t=342) +- [00:10:00 Сериализатор функции](https://youtu.be/GtKPniOEzh8?t=600) +- [00:15:25 Сериализатор функции разных типов (расширяемый)](https://youtu.be/GtKPniOEzh8?t=925) +- [00:23:06 Десереализация ](https://youtu.be/GtKPniOEzh8?t=1386) +- [00:25:26 Сериализация объекта в бинарный формат, с помощью библиотеки v8 ](https://youtu.be/GtKPniOEzh8?t=1526) +- [00:28:26 Сериализация объекта, с помощью разных библиотек](https://youtu.be/GtKPniOEzh8?t=1706) + +## [Асинхронность с библиотекой async.js](https://youtu.be/XQ94wQc-erU) + +## [Фабрики и пулы объектов в JavaScript, factorify, poolify](https://youtu.be/Ax_mSvadFp8) + +- [00:00:00 Введение ](https://youtu.be/Ax_mSvadFp8?t=0) +- [00:02:38 Фабрика ( factory )](https://youtu.be/Ax_mSvadFp8?t=158) +- [00:05:44 Фабрика прототипов ](https://youtu.be/Ax_mSvadFp8?t=344) +- [00:10:48 Фабрика классов ](https://youtu.be/Ax_mSvadFp8?t=648) +- [00:12:28 Фабрика функций ](https://youtu.be/Ax_mSvadFp8?t=748) +- [00:15:55 Фабричные методы ](https://youtu.be/Ax_mSvadFp8?t=955) +- [00:16:55 Превращение функций в фабрику ( factorify)](https://youtu.be/Ax_mSvadFp8?t=1015) +- [00:19:44 Пул ( pool )](https://youtu.be/Ax_mSvadFp8?t=1184) +- [00:23:05 Работа с пулом ](https://youtu.be/Ax_mSvadFp8?t=1385) +- [00:23:04 Обобщенный пул](https://youtu.be/Ax_mSvadFp8?t=1384) +- [00:24:55 Пулифицирование фабрики ( poolify ) ](https://youtu.be/Ax_mSvadFp8?t=1495) +- [00:28:50 Улучшенная пулифицированная фабрика ](https://youtu.be/Ax_mSvadFp8?t=1730) +- [00:32:10 Асинхронная работа с пулом ](https://youtu.be/Ax_mSvadFp8?t=1930) +- [00:45:25 Одновременное использование factorify и poolify ](https://youtu.be/Ax_mSvadFp8?t=2725) +- [00:51:54 Обобщение](https://youtu.be/Ax_mSvadFp8?t=3114) + +## [Подход к изучению программирования (выступление на дне факультета Информатики КПИ 12 декабря 2018)](https://youtu.be/zMU4ir10DMg) + +- [00:40 Что нужно знать?](https://youtu.be/zMU4ir10DMg?t=40) +- [03:41 Откуда брать знания ](https://youtu.be/zMU4ir10DMg?t=221) +- [07:39 Проблемы отрасли ](https://youtu.be/zMU4ir10DMg?t=459) +- [13:12 Дерево парадигм ](https://youtu.be/zMU4ir10DMg?t=792) +- [14:15 Технологии и техники](https://youtu.be/zMU4ir10DMg?t=855) +- [14:32 Разница парадигм](https://youtu.be/zMU4ir10DMg?t=872) +- [14:48 Что общего в парадигмах](https://youtu.be/zMU4ir10DMg?t=888) +- [15:33 Прочие парадигмы и техники](https://youtu.be/zMU4ir10DMg?t=933) +- [17:46 Мультипарадигменность](https://youtu.be/zMU4ir10DMg?t=1066) +- [18:46 Метапрограммирование](https://youtu.be/zMU4ir10DMg?t=1126) +- [19:13 Как не деградировать?](https://youtu.be/zMU4ir10DMg?t=1153) +- [21:29 Как найти общий язык? ](https://youtu.be/zMU4ir10DMg?t=1289) +- [24:31 Задачи программной инженерии](https://youtu.be/zMU4ir10DMg?t=1471) +- [28:19 Преодоление сложности ](https://youtu.be/zMU4ir10DMg?t=1699) +- [28:21 Связывание данных и логики](https://youtu.be/zMU4ir10DMg?t=1701) +- [28:30 Различные концепции ](https://youtu.be/zMU4ir10DMg?t=1710) +- [29:40 ВУЗ должен меняться](https://youtu.be/zMU4ir10DMg?t=1780) +- [33:53 Неспециальные предметы](https://youtu.be/zMU4ir10DMg?t=2033) +- [35:18 Чего не хватает](https://youtu.be/zMU4ir10DMg?t=2118) +- [36:57 Проблем много ](https://youtu.be/zMU4ir10DMg?t=2217) +- [40:20 ВУЗ должен знать](https://youtu.be/zMU4ir10DMg?t=2420) + +## [Асинхронность на промисах, Promise, all, then, catch, race](https://youtu.be/RMl4r6s1Y8M) + +## [Типизированные массивы в JavaScript](https://youtu.be/tTNcqxbxhfY) + +## [Шаблон Singleton (синглтон) в JavaScript](https://youtu.be/qdJ5yikZnfE) + +- [00:00:00 Singleton через конструктор прототипа](https://youtu.be/qdJ5yikZnfE?t=0) +- [00:03:27 Singleton через замыкания ](https://youtu.be/qdJ5yikZnfE?t=207) +- [00:06:10 Пример singleton через замыкания ](https://youtu.be/qdJ5yikZnfE?t=370) +- [00:08:15 Пример singleton через замыкания в функциональном стиле ](https://youtu.be/qdJ5yikZnfE?t=495) +- [00:09:23 Пример singleton через замыкания в функциональном стиле (упрощенный) ](https://youtu.be/qdJ5yikZnfE?t=563) +- [00:10:32 Создание singleton в JS](https://youtu.be/qdJ5yikZnfE?t=632) + +## [Функциональные объекты, функторы и монады в JavaScript](https://youtu.be/3Z7f0Gi8pxw) + +- [00:00:00 Определение функтора ](https://youtu.be/3Z7f0Gi8pxw?t=0) +- [00:01:40 Функтор из прототипа ](https://youtu.be/3Z7f0Gi8pxw?t=100) +- [00:08:17 Функтор из прототипа (упрощенный) ](https://youtu.be/3Z7f0Gi8pxw?t=497) +- [00:09:14 Функтор из замыкания ](https://youtu.be/3Z7f0Gi8pxw?t=554) +- [00:11:49 Функтор из замыкания с тернарным оператором](https://youtu.be/3Z7f0Gi8pxw?t=709) +- [00:12:44 Аппликативный функтор из прототипа ](https://youtu.be/3Z7f0Gi8pxw?t=764) +- [00:18:08 Аппликативный функтор из замыкания (монада)](https://youtu.be/3Z7f0Gi8pxw?t=1088) +- [00:23:11 Пример применения монады ](https://youtu.be/3Z7f0Gi8pxw?t=1391) +- [00:28:37 Функциональный объект ](https://youtu.be/3Z7f0Gi8pxw?t=1717) +- [00:39:44 Пример применения функционального объекта](https://youtu.be/3Z7f0Gi8pxw?t=2384) +- [00:45:27 Обобщение](https://youtu.be/3Z7f0Gi8pxw?t=2727) + +## [Асинхронные функции, async/await, thenable, обработка ошибок](https://youtu.be/Jdf_tZuJbHI) + +## [Асинхронные адаптеры: promisify, callbackify, asyncify...](https://youtu.be/76k6_YkYRmU) + +## [Асинхронные коллекторы данных](https://youtu.be/tgodt1JL6II) + +## [Утечки памяти в Node.js и JavaScript, сборка мусора и профилирование](https://youtu.be/0oZa64SB2wM) + +## [Рекурсия: косвенная и хвостовая, стек, выход](https://youtu.be/W2skCjIgVKE) + +- [00:00 Рекурсивная функция для вычисления глубины стека](https://youtu.be/W2skCjIgVKE?t=0) +- [03:25 Неявная рекурсия](https://youtu.be/W2skCjIgVKE?t=205) +- [04:52 Рекурсивная функция для вычисления степени числа](https://youtu.be/W2skCjIgVKE?t=292) +- [06:12 Рекурсивная функция для вычисления факториала ](https://youtu.be/W2skCjIgVKE?t=372) +- [06:29 Рекурсивная функция для вычисления числа Фибоначчи ](https://youtu.be/W2skCjIgVKE?t=389) +- [09:27 Рекурсивная функция, как аналог функции reduce ](https://youtu.be/W2skCjIgVKE?t=567) +- [12:04 Оптимизация хвостовой рекурсии ](https://youtu.be/W2skCjIgVKE?t=724) +- [15:41 Оптимизация обычной рекурсивной функции](https://youtu.be/W2skCjIgVKE?t=941) + +## [Дженерики и обобщенное программирование](https://youtu.be/r6W2z3DQhoI) + +## [Генераторы и асинхронные генераторы в JavaScript](https://youtu.be/kvNm9D32s8s) + +- [00:00 Способы объявления генераторов ](https://youtu.be/kvNm9D32s8s?t=0) +- [10:41 Пример генератора с yield ](https://youtu.be/kvNm9D32s8s?t=641) +- [15:54 Пример генератора с yield и return ](https://youtu.be/kvNm9D32s8s?t=954) +- [18:47 Получение значений из генератора циклом for...of ](https://youtu.be/kvNm9D32s8s?t=1127) +- [21:04 Получение значений из генератора spead - оператором ](https://youtu.be/kvNm9D32s8s?t=1264) +- [21:50 Метод next ](https://youtu.be/kvNm9D32s8s?t=1310) +- [23:30 Пример генератора с yield * возвращающего итерируемые объекты ](https://youtu.be/kvNm9D32s8s?t=1410) +- [25:05 Пример генератора с yield * возвращающего другие генераторы ](https://youtu.be/kvNm9D32s8s?t=1505) +- [26:18 Метод return ](https://youtu.be/kvNm9D32s8s?t=1578) +- [28:11 Метод throw](https://youtu.be/kvNm9D32s8s?t=1691) +- [29:05 Обобщение](https://youtu.be/kvNm9D32s8s?t=1745) + +## [Итераторы и асинхронные итераторы в JavaScript](https://youtu.be/rBGFlWpVpGs) + +## [Фасад - петтерн для скрытия сложности](https://youtu.be/oJtBO7CystE) + +## [Адаптер (Adapter) - паттерн достижения совместимости](https://youtu.be/cA65McLQrR8) + +- [0:00 введение](https://youtu.be/cA65McLQrR8?t=0) +- [1:30 adapter на prototype](https://youtu.be/cA65McLQrR8?t=90) +- [3:57 adapter на class](https://youtu.be/cA65McLQrR8?t=237) +- [4:23 adapter на function](https://youtu.be/cA65McLQrR8?t=263) +- [6:15 adapter на классе-обертке (boxing)](https://youtu.be/cA65McLQrR8?t=375) +- [7:08 adapter на замыканиях (closure)](https://youtu.be/cA65McLQrR8?t=428) +- [8:10 adapter на interface](https://youtu.be/cA65McLQrR8?t=490) +- [13:45 adapter на events](https://youtu.be/cA65McLQrR8?t=825) +- [16:00 выводы](https://youtu.be/cA65McLQrR8?t=960) + +## [Стратегия (Strategy) - выбор взаимозаменяемого поведения](https://youtu.be/hO8VSVv0NqM) + +- [0:00 введение](https://youtu.be/hO8VSVv0NqM?t=0) +- [3:40 strategy на class](https://youtu.be/hO8VSVv0NqM?t=220) +- [15:04 strategy на prototype](https://youtu.be/hO8VSVv0NqM?t=904) +- [16:14 strategy на function](https://youtu.be/hO8VSVv0NqM?t=974) +- [20:22 strategy с примером работы над массивом](https://youtu.be/hO8VSVv0NqM?t=1222) +- [24:07 обобщение](https://youtu.be/hO8VSVv0NqM?t=1447) + +## [Линзы в JavaScript - функциональные аналоги геттера и сеттера](https://youtu.be/IBF5gFU6G-o) + +## [Перечислимый тип (enum) в JavaScript и TypeScript](https://youtu.be/BXiKebOIAGI) + +## [Графы и запросы к графовым структурам на JavaScript](https://youtu.be/a0W0T8Yqw3s) + +## [Паттерн Команда (Command) действие и параметры как объект](https://youtu.be/vER0vYL4hM4) + +## [Тестирование: юниттесты с примерами на JavaScript](https://youtu.be/CszugIag2TA) + +## [Инверсия управления и внедрение зависимостей в Node.js](https://youtu.be/Fz86Fdjz-LM) + +## [Слои, связанность и связность кода в JavaScript](https://youtu.be/A3RpwNlVeyY) + +## [Измерение производительности кода и оптимизация в JavaScript и Node.js](https://youtu.be/sanq2X7Re8o) + +- [00:00:00 Введение ](https://youtu.be/sanq2X7Re8o?t=0) +- [00:05:27 Console.time и console.timeEnd ](https://youtu.be/sanq2X7Re8o?t=327) +- [00:09:05 New Date( ).getTime( ) ](https://youtu.be/sanq2X7Re8o?t=545) +- [00:11:15 Process.hrtime( )](https://youtu.be/sanq2X7Re8o?t=675) +- [00:18:51 Process.hrtime.bigint( ) и движок для benchmark](https://youtu.be/sanq2X7Re8o?t=1131) +- [00:27:00 Сравнение функций инстанцирования ](https://youtu.be/sanq2X7Re8o?t=1620) +- [00:31:06 Алгоритм для сравнения ](https://youtu.be/sanq2X7Re8o?t=1866) +- [00:39:36 Работа движка benchmark ](https://youtu.be/sanq2X7Re8o?t=2376) +- [00:41:37 Результаты теста](https://youtu.be/sanq2X7Re8o?t=2497) +- [00:47:33 Сравнение массива и объектов ](https://youtu.be/sanq2X7Re8o?t=2853) +- [00:54:21 Результаты теста ](https://youtu.be/sanq2X7Re8o?t=3261) +- [00:55:00 Сравнение 3 функций range ](https://youtu.be/sanq2X7Re8o?t=3300) +- [00:56:34 Результаты теста ](https://youtu.be/sanq2X7Re8o?t=3394) +- [00:58:50 Сравнение функций по способу вызова](https://youtu.be/sanq2X7Re8o?t=3530) +- [00:59:56 Результаты теста](https://youtu.be/sanq2X7Re8o?t=3596) +- [01:01:34 Сравнение indexOf и includes](https://youtu.be/sanq2X7Re8o?t=3694) +- [01:01:54 Результаты теста ](https://youtu.be/sanq2X7Re8o?t=3714) +- [01:03:23 Сравнение объявления переменной до и после цикла ](https://youtu.be/sanq2X7Re8o?t=3803) +- [01:05:02 Сравнение for keys, for (...in...) и for (...of...)](https://youtu.be/sanq2X7Re8o?t=3902) +- [01:05:34 Результаты теста ](https://youtu.be/sanq2X7Re8o?t=3934) +- [01:05:58 Сравнение шаблонных строк](https://youtu.be/sanq2X7Re8o?t=3958) +- [01:06:12 Сравнение хождения цикла по функции map в ES6](https://youtu.be/sanq2X7Re8o?t=3972) +- [01:07:18 Результаты теста ](https://youtu.be/sanq2X7Re8o?t=4038) +- [01:07:56 Сравнение repeat и arrayJoin ](https://youtu.be/sanq2X7Re8o?t=4076) +- [01:08:15 Результаты теста](https://youtu.be/sanq2X7Re8o?t=4095) +- [01:08:26 Сравнение дублирования массива ](https://youtu.be/sanq2X7Re8o?t=4106) +- [01:08:58 Результаты теста](https://youtu.be/sanq2X7Re8o?t=4138) +- [01:09:43 Сравнение копирование набора данных ](https://youtu.be/sanq2X7Re8o?t=4183) +- [01:10:26 Результаты теста ](https://youtu.be/sanq2X7Re8o?t=4226) +- [01:10:47 Сравнение итерирования с помощью forEarch и for (...of...)](https://youtu.be/sanq2X7Re8o?t=4247) +- [01:11:08 Результаты теста](https://youtu.be/sanq2X7Re8o?t=4268) +- [01:11:31 Обобщение](https://youtu.be/sanq2X7Re8o?t=4291) + +## [Слой доступа к данным, курсор, транзакция](https://youtu.be/CRcSWtWVvrA) + +## [HTTP запросы в браузере и Node.js: XMLHttpRequest, fetch](https://youtu.be/wMMki2FEYGY) + +## [Метапрограммирование с примерами на JavaScript](https://youtu.be/Ed9onRv4G5Y) + +## [Тестирование: системное и интеграционное тестирование на JavaScript](https://youtu.be/OuKu_6H_6gE) + +## [Отмена асинхронных операций, cancellable callback and Promise в JavaScript](https://youtu.be/T8fXlnqI4Ws) + +## [Асинхронная композиция функций на JavaScript](https://youtu.be/3ZCrMlMpOrM) + +## [Thenable и легковесный await в JavaScript](https://youtu.be/DXp__1VNIvI) + +## [Конкурентная асинхронная очередь на JavaScript](https://youtu.be/Lg46AH8wFvg) + +## [Паттерн Revealing Constructor - открытый конструктор](https://youtu.be/leR5sXRkuJI) + +## [Модель акторов для параллельных вычислений](https://youtu.be/xp5MVKEqxY4) + +## [Have Objects Failed? Или что не так с ООП?](https://youtu.be/4yO5OS0vPSw) + +- [1:46 Присвоенные идеи ООП](https://youtu.be/4yO5OS0vPSw?t=106) +- [11:47 Притянутые достоинства ООП](https://youtu.be/4yO5OS0vPSw?t=707) +- [22:06 Проблемы ООП](https://youtu.be/4yO5OS0vPSw?t=1326) +- [39:56 Как жить с ООП](https://youtu.be/4yO5OS0vPSw?t=2396) +- [56:44 Подходящие области для ООП](https://youtu.be/4yO5OS0vPSw?t=3404) +- [1:03:51 Неподходящие области для ООП](https://youtu.be/4yO5OS0vPSw?t=3831) +- [1:11:30 Заключение](https://youtu.be/4yO5OS0vPSw?t=4290) + +## [Интроспекция и рефлексия в JavaScript](https://youtu.be/yvW1PjUVeM0) + +## [История развития языков программирования](https://youtu.be/qqz0VSaNxuw) + +- [0:00:02 введение](https://youtu.be/qqz0VSaNxuw?t=2) +- [0:00:57 карты для механических машин](https://youtu.be/qqz0VSaNxuw?t=57) +- [0:01:50 карты для электронных машин](https://youtu.be/qqz0VSaNxuw?t=110) +- [0:03:21 машинный код](https://youtu.be/qqz0VSaNxuw?t=201) +- [0:04:05 Assembly language](https://youtu.be/qqz0VSaNxuw?t=245) +- [0:06:14 Fortran](https://youtu.be/qqz0VSaNxuw?t=374) +- [0:07:28 Basic](https://youtu.be/qqz0VSaNxuw?t=448) +- [0:09:19 LISP](https://youtu.be/qqz0VSaNxuw?t=559) +- [0:12:23 Algol 60](https://youtu.be/qqz0VSaNxuw?t=743) +- [0:13:25 C](https://youtu.be/qqz0VSaNxuw?t=805) +- [0:14:23 C++](https://youtu.be/qqz0VSaNxuw?t=863) +- [0:15:13 Ada](https://youtu.be/qqz0VSaNxuw?t=913) +- [0:16:08 dBase, FoxBase, Clipper](https://youtu.be/qqz0VSaNxuw?t=968) +- [0:19:56 Haskell](https://youtu.be/qqz0VSaNxuw?t=1196) +- [0:21:23 Python](https://youtu.be/qqz0VSaNxuw?t=1283) +- [0:23:37 Java](https://youtu.be/qqz0VSaNxuw?t=1417) +- [0:25:45 Delphi](https://youtu.be/qqz0VSaNxuw?t=1545) +- [0:28:43 SQL](https://youtu.be/qqz0VSaNxuw?t=1723) +- [0:30:43 PHP 0:41:17 стрелочку из плюсов взяли](https://youtu.be/qqz0VSaNxuw?t=1843) +- [0:33:14 C#](https://youtu.be/qqz0VSaNxuw?t=1994) +- [0:35:20 Go](https://youtu.be/qqz0VSaNxuw?t=2120) +- [0:36:17 Rust](https://youtu.be/qqz0VSaNxuw?t=2177) +- [0:37:30 TypeScript](https://youtu.be/qqz0VSaNxuw?t=2250) +- [0:39:59 Swift](https://youtu.be/qqz0VSaNxuw?t=2399) +- [0:40:19 Kotlin](https://youtu.be/qqz0VSaNxuw?t=2419) +- [0:42:20 взаимовлияние языков](https://youtu.be/qqz0VSaNxuw?t=2540) +- [0:44:23 все ли языки используются сегодня](https://youtu.be/qqz0VSaNxuw?t=2663) +- [0:49:35 производительность языков](https://youtu.be/qqz0VSaNxuw?t=2975) +- [0:54:34 опциональная аннотация типов](https://youtu.be/qqz0VSaNxuw?t=3274) +- [0:56:50 прогревание кода](https://youtu.be/qqz0VSaNxuw?t=3410) +- [0:59:24 первые операционные системы](https://youtu.be/qqz0VSaNxuw?t=3564) +- [1:00:44 ограничение по вложенности рекурсии](https://youtu.be/qqz0VSaNxuw?t=3644) +- [1:02:53 абстрактное синтаксическое дерево](https://youtu.be/qqz0VSaNxuw?t=3773) +- [1:04:52 машинный код и байт-код](https://youtu.be/qqz0VSaNxuw?t=3892) +- [1:07:26 typescript быстрее javascript?](https://youtu.be/qqz0VSaNxuw?t=4046) +- [1:11:45 goroutine на Go асинхронная?](https://youtu.be/qqz0VSaNxuw?t=4305) +- [1:12:58 асинхронная функция в javascript](https://youtu.be/qqz0VSaNxuw?t=4378) +- [1:15:23 строгая типизация влияет на скорость?](https://youtu.be/qqz0VSaNxuw?t=4523) +- [1:16:13 выведение и проверка типов в IDE](https://youtu.be/qqz0VSaNxuw?t=4573) + +## [Парадигмы программирования (обзор)](https://youtu.be/Yk1sxLVHfjs) + +- [00:20 парадигма](https://youtu.be/Yk1sxLVHfjs?t=20) +- [02:19 императивная программа: пошаговое исполнение на примере JavaScript](https://youtu.be/Yk1sxLVHfjs?t=139) +- [03:22 пошаговое исполнение характерно для неструктурных ЯП: Assembly language, Basic](https://youtu.be/Yk1sxLVHfjs?t=202) +- [05:08 структурная программа на Rust](https://youtu.be/Yk1sxLVHfjs?t=308) +- [06:21 процедурный стиль на Python](https://youtu.be/Yk1sxLVHfjs?t=381) +- [07:28 объектно-ориентированное программирование на примере JavaScript](https://youtu.be/Yk1sxLVHfjs?t=448) +- [09:32 ООП хорош не для всякой задачи -- пример с пирожком](https://youtu.be/Yk1sxLVHfjs?t=572) +- [13:28 прототипное программирование](https://youtu.be/Yk1sxLVHfjs?t=808) +- [16:51 функциональное программирование](https://youtu.be/Yk1sxLVHfjs?t=1011) +- [18:58 асинхронное программирование](https://youtu.be/Yk1sxLVHfjs?t=1138) +- [22:48 реактивное программирование](https://youtu.be/Yk1sxLVHfjs?t=1368) +- [26:04 событийно-ориентированное программирование (управляется потоками событий)](https://youtu.be/Yk1sxLVHfjs?t=1564) +- [27:03 метапрограммирование](https://youtu.be/Yk1sxLVHfjs?t=1623) +- [28:58 мультипарадигменное программирование](https://youtu.be/Yk1sxLVHfjs?t=1738) +- [30:52 параллельное программирование](https://youtu.be/Yk1sxLVHfjs?t=1852) +- [31:58 реактивность](https://youtu.be/Yk1sxLVHfjs?t=1918) +- [33:29 функции 1 класса](https://youtu.be/Yk1sxLVHfjs?t=2009) +- [34:55 геттеры и сеттеры](https://youtu.be/Yk1sxLVHfjs?t=2095) +- [37:37 смешивание стилей](https://youtu.be/Yk1sxLVHfjs?t=2257) +- [38:07 если хочется писать в чистом ООП](https://youtu.be/Yk1sxLVHfjs?t=2287) +- [39:43 объект, класс, коллекция -- разница](https://youtu.be/Yk1sxLVHfjs?t=2383) +- [47:27 где хранятся классы](https://youtu.be/Yk1sxLVHfjs?t=2847) +- [47:54 у каждой парадигмы свои шаблоны программирования](https://youtu.be/Yk1sxLVHfjs?t=2874) +- [48:52 когда используется функциональное программирование](https://youtu.be/Yk1sxLVHfjs?t=2932) + +## [Примеси, обертки, декораторы, мемоизация](https://youtu.be/2h9syXN5wO0) + +- [00:00:00 Синхронная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=0) +- [00:02:55 Синхронная универсальная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=175) +- [00:08:28 Асинхронная универсальная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=508) +- [00:15:50 Синхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/2h9syXN5wO0?t=950) +- [00:22:45 Асинхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/2h9syXN5wO0?t=1365) +- [00:25:38 Функция-обертка, которая ограничивает вызов функции до одного вызова (once) ](https://youtu.be/2h9syXN5wO0?t=1538) +- [00:27:36 Функция-обертка, которая ограничивает вызов функции до n-го вызова (limit)](https://youtu.be/2h9syXN5wO0?t=1656) +- [00:29:50 Функция-обертка, которая отменяет вызов функции (cancel)](https://youtu.be/2h9syXN5wO0?t=1790) +- [00:32:29 Функция-обертка с методами timeout, limit, cancel](https://youtu.be/2h9syXN5wO0?t=1949) +- [00:39:03 Функция-обертка с методами timeout, limit, cancel (оптимизированная)](https://youtu.be/2h9syXN5wO0?t=2343) +- [00:42:28 Функция-обертка, которая ограничивает один вызов за 200 мс (throttle)](https://youtu.be/2h9syXN5wO0?t=2548) +- [00:45:47 Примесь поля через точку ](https://youtu.be/2h9syXN5wO0?t=2747) +- [00:51:35 Примесь поля через функцию extend](https://youtu.be/2h9syXN5wO0?t=3095) +- [00:57:35 Примесь поля через object.assign( )](https://youtu.be/2h9syXN5wO0?t=3455) +- [00:59:18 Примесь поведения ](https://youtu.be/2h9syXN5wO0?t=3558) +- [01:02:23 Примесь изменения класса](https://youtu.be/2h9syXN5wO0?t=3743) +- [01:06:50 Определение](https://youtu.be/2h9syXN5wO0?t=4010) +- [01:07:30 Реализация простой мемоизации ](https://youtu.be/2h9syXN5wO0?t=4050) +- [01:14:43 Реализация простой мемоизации с проверкой скорости ](https://youtu.be/2h9syXN5wO0?t=4483) +- [01:20:43 Удаление накопленного кэша ](https://youtu.be/2h9syXN5wO0?t=4843) +- [01:25:35 Асинхронная мемоизация ](https://youtu.be/2h9syXN5wO0?t=5135) +- [01:31:10 Преобразование аргументов и ключей в hash-функцию](https://youtu.be/2h9syXN5wO0?t=5470) +- [01:33:32 Реализация сложной мемоизации](https://youtu.be/2h9syXN5wO0?t=5612) + +## [Ответы на вопросы по курсу "Основы программирования" 2019-2020](https://youtu.be/TY6nDW7aYys) + +## [Антипаттерны процедурного программирования](https://youtu.be/cTv7V22mkwE) + +## [Семинар: выполнение лабораторных работ на JavaSript по курсу "Основы программирования"](https://youtu.be/ikUOyFPzdJw) + +## [Массивы в JavaScript (методы Array)](https://youtu.be/D1kfYBkX9FE) + +- [00:00 Конструкция массива](https://youtu.be/D1kfYBkX9FE?t=0) +- [09:58 Метод concat](https://youtu.be/D1kfYBkX9FE?t=598) +- [11:00 Методы every и some ](https://youtu.be/D1kfYBkX9FE?t=660) +- [13:00 Метод filter ](https://youtu.be/D1kfYBkX9FE?t=780) +- [13:29 Методы find и findIndex](https://youtu.be/D1kfYBkX9FE?t=809) +- [14:30 Метод flat ](https://youtu.be/D1kfYBkX9FE?t=870) +- [17:08 Метод includes ](https://youtu.be/D1kfYBkX9FE?t=1028) +- [17:32 Метод indexOf и lastIndexOf](https://youtu.be/D1kfYBkX9FE?t=1052) +- [18:35 Метод join](https://youtu.be/D1kfYBkX9FE?t=1115) +- [18:58 Метод reverse](https://youtu.be/D1kfYBkX9FE?t=1138) +- [19:29 Метод slice](https://youtu.be/D1kfYBkX9FE?t=1169) +- [21:49 Метод splice](https://youtu.be/D1kfYBkX9FE?t=1309) +- [23:27 Методы reduce и reduceRight](https://youtu.be/D1kfYBkX9FE?t=1407) + +## [Code Review: как это и зачем](https://youtu.be/EKL6NiIQ6ZU) + +## [Семинар: Code Review, ответы на вопросы](https://youtu.be/AgH4OAKbmkM) + +## [Мономорфный и полиморфный код, инлайн-кэш, скрытые классы в JavaScript](https://youtu.be/9JUY3prnCQ4) + +## [Ассоциация, агрегация и композиция объектов в JavaScript](https://youtu.be/tOIcBrzezK0) + +## [Рефакторинг: причины, цели, техники и процесс](https://youtu.be/z73wmpdweQ4) + +## [Принцип подстановки Барбары Лисков](https://youtu.be/RbhYxygxroc) + +## [Композиция функций (pipe, compose) в JavaScript](https://youtu.be/xS9FicVrOTI) + +## [Примеси в JavaScript: mixin, extend, Object.assign, class λ-mixin](https://youtu.be/NZMrJ2adEyY) + +## [Прототипное программирование и прототипное наследование в JavaScript](https://youtu.be/SzaXTW2qcJE) + +## [Мемоизация функций: memoize в JavaScript](https://youtu.be/H6S8QJo2Qxg) + +## [Функции-обертки: Wrappers в JavaScript](https://youtu.be/En7pWi2fSzs) + +## [Новое в JavaScript: ES.Next, ECMAScript 2020, ES11, ES10, ES9, ES8, ES7, ES6, ES2020, ES2019](https://youtu.be/fUjHLj8bq_Y) + +- [00:00 ECMA Script versions](https://youtu.be/fUjHLj8bq_Y?t=0) +- [09:40 Array.proptotype.includes ](https://youtu.be/fUjHLj8bq_Y?t=580) +- [10:55 Array.proptotype.flat ](https://youtu.be/fUjHLj8bq_Y?t=655) +- [11:36 Array.proptotype.flatMap](https://youtu.be/fUjHLj8bq_Y?t=696) +- [12:20 Array.proptotype.sort](https://youtu.be/fUjHLj8bq_Y?t=740) +- [14:24 Object.values ](https://youtu.be/fUjHLj8bq_Y?t=864) +- [15:06 Object.keys ](https://youtu.be/fUjHLj8bq_Y?t=906) +- [15:15 Object.entries ](https://youtu.be/fUjHLj8bq_Y?t=915) +- [15:49 Object.fromEntries ](https://youtu.be/fUjHLj8bq_Y?t=949) +- [16:36 String.proptotype.padStart / String.proptotype.padEnd ](https://youtu.be/fUjHLj8bq_Y?t=996) +- [17:02 String.proptotype.trimStart / String.proptotype.trimEnd](https://youtu.be/fUjHLj8bq_Y?t=1022) +- [17:18 Operator rest ](https://youtu.be/fUjHLj8bq_Y?t=1038) +- [19:38 Operator spread](https://youtu.be/fUjHLj8bq_Y?t=1178) +- [21:34 Operator exponentiation x ** y](https://youtu.be/fUjHLj8bq_Y?t=1294) +- [22:35 Operator optional chaining ?.](https://youtu.be/fUjHLj8bq_Y?t=1355) +- [24:22 Asynchronous function: async / await ](https://youtu.be/fUjHLj8bq_Y?t=1462) +- [26:34 Trailing Commas ](https://youtu.be/fUjHLj8bq_Y?t=1594) +- [28:00 Asynchronous iterable contract: for-await](https://youtu.be/fUjHLj8bq_Y?t=1680) +- [29:51 Try...catch ](https://youtu.be/fUjHLj8bq_Y?t=1791) +- [30:21 Function.prototype.toString ](https://youtu.be/fUjHLj8bq_Y?t=1821) +- [30:58 Symbol.prototype.description ](https://youtu.be/fUjHLj8bq_Y?t=1858) +- [32:11 Promise.finaly ](https://youtu.be/fUjHLj8bq_Y?t=1931) +- [33:22 Promise.allSettled ](https://youtu.be/fUjHLj8bq_Y?t=2002) +- [36:18 More features](https://youtu.be/fUjHLj8bq_Y?t=2178) + +## [Вступительная лекция по инженерии программного обеспечения (КПИ 1 курс) 2021-09-01](https://youtu.be/vWi6KyG078g) + +## [Автоматное программирование c примерами на JavaScript](https://youtu.be/mxz7_zcip0c) + +## [Контрактное программирование с примерами на JavaScript и Node.js](https://youtu.be/K5_kSUvbGEQ) + +## [JavaScript - Практические задачи #1: Пример исправления, лайвкодинг, оптимизация и рефакторинг](https://youtu.be/CRmjViLEE9E) + +## [JavaScript и Node.js: Добавь в Github личную карту знаний](https://youtu.be/gDUGZsw2N2g) diff --git a/Courses/Fundamentals.md b/Courses/Fundamentals.md index 2d05836..eb76e19 100644 --- a/Courses/Fundamentals.md +++ b/Courses/Fundamentals.md @@ -180,978 +180,3 @@ - Интроспекция: https://github.com/HowProgrammingWorks/Introspection - Рефлекция: https://github.com/HowProgrammingWorks/Reflect - [Почему хорошее ИТ-образование невостребовано рыночком](https://youtu.be/nvIJE6xMpiI) - -# Основы программирования (таймкоды) - -## [Карта специальности инженер-программист](https://youtu.be/SE5aXH-yf0I) - -- [00:00:00 Введение](https://youtu.be/SE5aXH-yf0I?t=0) -- [00:02:21 Что такое программирование? ](https://youtu.be/SE5aXH-yf0I?t=141) -- [00:05:55 Связанные понятия ](https://youtu.be/SE5aXH-yf0I?t=355) -- [00:06:43 Основы программной инженерии ](https://youtu.be/SE5aXH-yf0I?t=403) -- [00:11:42 Предсказуемые вычисления ](https://youtu.be/SE5aXH-yf0I?t=702) -- [00:14:36 Моделирование](https://youtu.be/SE5aXH-yf0I?t=876) -- [00:14:52 Классификация моделей ](https://youtu.be/SE5aXH-yf0I?t=892) -- [00:17:33 Схемы моделирования ](https://youtu.be/SE5aXH-yf0I?t=1053) -- [00:22:23 Парадигмы программирования ](https://youtu.be/SE5aXH-yf0I?t=1343) -- [00:23:16 Императивное и функциональное программирование ](https://youtu.be/SE5aXH-yf0I?t=1396) -- [00:28:25 Неструктурное программирование ](https://youtu.be/SE5aXH-yf0I?t=1705) -- [00:30:01 Структурное программирование ](https://youtu.be/SE5aXH-yf0I?t=1801) -- [00:30:46 Процедурное программирование ](https://youtu.be/SE5aXH-yf0I?t=1846) -- [00:31:18 Объектно-ориетированное программирование ](https://youtu.be/SE5aXH-yf0I?t=1878) -- [00:31:48 Прототипно-ориетированное программирование ](https://youtu.be/SE5aXH-yf0I?t=1908) -- [00:32:14 Функциональное программирование ](https://youtu.be/SE5aXH-yf0I?t=1934) -- [00:32:48 Узконаправленное программирование](https://youtu.be/SE5aXH-yf0I?t=1968) -- [00:33:44 Техники и технологии](https://youtu.be/SE5aXH-yf0I?t=2024) -- [00:36:55 Реактивное программирование и Событийно-ориентированное](https://youtu.be/SE5aXH-yf0I?t=2215) -- [00:38:16 Функционально-реактивное программирование ](https://youtu.be/SE5aXH-yf0I?t=2296) -- [00:38:39 Модель акторов](https://youtu.be/SE5aXH-yf0I?t=2319) -- [00:39:49 Метапрограммирование ](https://youtu.be/SE5aXH-yf0I?t=2389) -- [00:43:09 Системное и прикладное программирование](https://youtu.be/SE5aXH-yf0I?t=2589) -- [00:44:25 Задачи программной инженерии ](https://youtu.be/SE5aXH-yf0I?t=2665) -- [00:50:46 Как преодолеть сложность ](https://youtu.be/SE5aXH-yf0I?t=3046) -- [00:52:16 Данные и логика ](https://youtu.be/SE5aXH-yf0I?t=3136) -- [00:57:49 Разработка программного обеспечения ](https://youtu.be/SE5aXH-yf0I?t=3469) -- [01:04:50 Подход к разработке ](https://youtu.be/SE5aXH-yf0I?t=3890) -- [01:06:04 Гибридная разработка ](https://youtu.be/SE5aXH-yf0I?t=3964) -- [01:07:10 Принцип NIH ](https://youtu.be/SE5aXH-yf0I?t=4030) -- [01:09:12 Классификация приложений по месту запуска](https://youtu.be/SE5aXH-yf0I?t=4152) -- [01:12:17 Схемы и примеры](https://youtu.be/SE5aXH-yf0I?t=4337) -## [Введение в программирование (1 часть)](https://youtu.be/5Gt61EX6HZ4) - -- [0:00:02 лекция о базовых понятиях для начинающих](https://youtu.be/5Gt61EX6HZ4?t=2) -- [0:01:43 что-то уже знаете / слышали](https://youtu.be/5Gt61EX6HZ4?t=103) -- [0:04:50 терминология важна](https://youtu.be/5Gt61EX6HZ4?t=290) -- [0:05:45 инструкция или оператор / Statement](https://youtu.be/5Gt61EX6HZ4?t=345) -- [0:07:23 синтаксис / Syntax](https://youtu.be/5Gt61EX6HZ4?t=443) -- [0:09:21 почти все группы операторов / Statements](https://youtu.be/5Gt61EX6HZ4?t=561) -- [0:13:27 операция 0:14:09 команда 0:15:03 директива](https://youtu.be/5Gt61EX6HZ4?t=807) -- [0:16:59 выражение / Expression](https://youtu.be/5Gt61EX6HZ4?t=1019) -- [0:20:53 значение / Value](https://youtu.be/5Gt61EX6HZ4?t=1253) -- [0:22:28 тип / Type](https://youtu.be/5Gt61EX6HZ4?t=1348) -- [0:27:22 литерал / Literal](https://youtu.be/5Gt61EX6HZ4?t=1642) -- [0:28:46 скаляр / Scalar, Primitive, Atomic value](https://youtu.be/5Gt61EX6HZ4?t=1726) -- [0:31:02 ссылка / Reference](https://youtu.be/5Gt61EX6HZ4?t=1862) -- [0:34:05 идентификатор / Identifier](https://youtu.be/5Gt61EX6HZ4?t=2045) -- [0:37:31 переменная / Variable](https://youtu.be/5Gt61EX6HZ4?t=2251) -- [0:40:08 присвоение / Assignment](https://youtu.be/5Gt61EX6HZ4?t=2408) -- [0:41:29 константа / Constant](https://youtu.be/5Gt61EX6HZ4?t=2489) -- [0:43:16 структурные типы / Composed types](https://youtu.be/5Gt61EX6HZ4?t=2596) -- [0:44:03 флаг / Flag](https://www.youtube.com/watch?v=5Gt61EX6HZ4&t=2643s) -- [0:45:09 перечисляемый тип](https://youtu.be/5Gt61EX6HZ4?t=2643) -- [0:46:02 алгоритм / Algorithm](https://youtu.be/5Gt61EX6HZ4?t=2762) -- [0:47:40 программа / Program](https://youtu.be/5Gt61EX6HZ4?t=2860) -- [0:49:01 инженерия / Engineering](https://youtu.be/5Gt61EX6HZ4?t=2941) -- [0:50:42 инженерия программного обеспечения / Software engineering](https://youtu.be/5Gt61EX6HZ4?t=3042) -- [0:52:03 программирование / Programming](https://youtu.be/5Gt61EX6HZ4?t=3123) -- [0:53:31 кодирование / Coding](https://youtu.be/5Gt61EX6HZ4?t=3211) -- [0:54:15 разработка программного обеспечения / Software development](https://youtu.be/5Gt61EX6HZ4?t=3255) -- [0:58:49 процедура, функция, подпрограмма, метод: различия](https://youtu.be/5Gt61EX6HZ4?t=3529) -- [0:59:15 блок кода / Block of code](https://youtu.be/5Gt61EX6HZ4?t=3555) -- [1:01:58 процедура или подпрограмма / Procedure or Subroutine](https://youtu.be/5Gt61EX6HZ4?t=3718) -- [1:05:18 функция / Function](https://youtu.be/5Gt61EX6HZ4?t=3918) -- [1:08:06 сигнатура функции / Function signature](https://youtu.be/5Gt61EX6HZ4?t=4086) -- [1:09:16 метод / Method](https://youtu.be/5Gt61EX6HZ4?t=4156) -- [1:10:37 цикл / Loop](https://www.youtube.com/watch?v=5Gt61EX6HZ4&t=4237s) -- [1:10:52 итерирование](https://www.youtube.com/watch?v=5Gt61EX6HZ4&t=4252s) -- [1:11:40 функциональное программирование](https://youtu.be/5Gt61EX6HZ4?t=4237) -- [1:13:05 условие / Conditional statements / ветвление](https://youtu.be/5Gt61EX6HZ4?t=4385) -- [1:14:54 парадигма программирования / Programming paradigm](https://youtu.be/5Gt61EX6HZ4?t=4494) -## [Семинар: Обсуждение плана и материалов курса «Основы программирования»](https://youtu.be/bQMTbRWrteU) - -- [0:15 - вопрос по операционным системам](https://youtu.be/bQMTbRWrteU?t=15) -- [3:35 - какой язык посоветуете из функционального программирования](https://youtu.be/bQMTbRWrteU?t=215) -- [4:40 - время нужное для прохождения курса](https://youtu.be/bQMTbRWrteU?t=280) -- [7:25 - учебники по JS и туториал](https://youtu.be/bQMTbRWrteU?t=445) -- [11:00 - экзамены, сертификат для студентов из других стран](https://youtu.be/bQMTbRWrteU?t=660) -- [12:45 - как будет проходить экзамен](https://youtu.be/bQMTbRWrteU?t=765) -- [14:55 - сколько времени нужно уделять в неделю или в день](https://youtu.be/bQMTbRWrteU?t=895) -- [17:35 - куда задавать вопросы](https://youtu.be/bQMTbRWrteU?t=1055) -- [18:56 - структура курса](https://youtu.be/bQMTbRWrteU?t=1136) -- [22:30 - контроль решения задач](https://youtu.be/bQMTbRWrteU?t=1350) -- [23:35 - сферы применения Node.js](https://youtu.be/bQMTbRWrteU?t=1415) -- [24:22 - возможно ли посещать курс лично](https://youtu.be/bQMTbRWrteU?t=1462) -- [26:23 - актуальность изучения С++ и Rust](https://youtu.be/bQMTbRWrteU?t=1583) -- [27:48 - стану ли я программистом пройдя курс](https://youtu.be/bQMTbRWrteU?t=1668) -- [28:10 - какой стандарт JS используется в курсе](https://youtu.be/bQMTbRWrteU?t=1690) -- [28:35 - откуда начинать курс](https://youtu.be/bQMTbRWrteU?t=1715) -- [29:20 - как посещать старшую группу](https://youtu.be/bQMTbRWrteU?t=1760) -- [31:45 - об основах вёрстки и популярных фреймворках](https://youtu.be/bQMTbRWrteU?t=1905) -- [33:03 - обязательно ли использовать фреймворки](https://youtu.be/bQMTbRWrteU?t=1983) -- [36:15 - почему столь немногим удается сдать экзамен](https://youtu.be/bQMTbRWrteU?t=2175) -- [36:50 - проверка задач для допуска к экзамену и их уровень сложности](https://youtu.be/bQMTbRWrteU?t=2210) -- [37:55 - теоретические вопросы на экзамене, пример](https://youtu.be/bQMTbRWrteU?t=2275) -- [39:35 - знание математики](https://youtu.be/bQMTbRWrteU?t=2375) -- [43:10 - сложные вопросы CS в курсе](https://youtu.be/bQMTbRWrteU?t=2590) -- [46:00 - как происходит проверка задач для допуска к экзамену](https://youtu.be/bQMTbRWrteU?t=2760) -## [Настройка среды: Node.js, npm, git, eslint](https://youtu.be/hSyA7tcNaCE) - -## [Базовый синтаксис JavaScript](https://youtu.be/xJn3k1f4BiM) - -- [00:00:00 Введение](https://youtu.be/xJn3k1f4BiM?t=0) -- [00:03:02 Идентификаторы (identifiers: const, let, arguments, object property)](https://youtu.be/xJn3k1f4BiM?t=182) -- [00:14:41 Циклы (loops)](https://youtu.be/xJn3k1f4BiM?t=881) -- [00:22:10 Функции (functions)](https://youtu.be/xJn3k1f4BiM?t=1330) -- [00:30:35 Объекты (objects) ](https://youtu.be/xJn3k1f4BiM?t=1835) -- [00:33:34 Итерирование по массиву ( for ( ... of ... { } )](https://youtu.be/xJn3k1f4BiM?t=2014) -- [00:39:01 Итерирование по объекту ( for ( ... in ... { } )](https://youtu.be/xJn3k1f4BiM?t=2341) -- [00:42:28 Синтаксис простого кода](https://youtu.be/xJn3k1f4BiM?t=2548) -- [00:55:21 Синтаксис функции](https://youtu.be/xJn3k1f4BiM?t=3321) -- [01:05:38 Синтаксис класса](https://youtu.be/xJn3k1f4BiM?t=3938) -- [01:09:10 Синтаксис расширения класса с помощью функции](https://youtu.be/xJn3k1f4BiM?t=4150) -- [01:14:59 Идентификаторы в виде символов unicode](https://youtu.be/xJn3k1f4BiM?t=4499) -- [01:17:15 Синтаксис комментариев](https://youtu.be/xJn3k1f4BiM?t=4635) -- [01:18:13 Способы объявления переменных ](https://youtu.be/xJn3k1f4BiM?t=4693) -- [01:18:24 Скалярные типы переменных (string, number, boolean)](https://youtu.be/xJn3k1f4BiM?t=4704) -- [01:19:12 Структурные/ссылочные типы переменных (function, array, object)](https://youtu.be/xJn3k1f4BiM?t=4752) -## [Базовый синтаксис JavaScript, продолжение](https://youtu.be/qa-XleqA0JU) - -- [00:01:34 Number (integer / float)](https://youtu.be/qa-XleqA0JU?t=94) -- [00:02:11 String ](https://youtu.be/qa-XleqA0JU?t=131) -- [00:02:15 Boolean](https://youtu.be/qa-XleqA0JU?t=135) -- [00:02:16 Object](https://youtu.be/qa-XleqA0JU?t=136) -- [00:03:08 Array](https://youtu.be/qa-XleqA0JU?t=188) -- [00:04:20 Метод array.push](https://youtu.be/qa-XleqA0JU?t=260) -- [00:04:31 Метод array.unshift](https://youtu.be/qa-XleqA0JU?t=271) -- [00:04:50 Метод array.shift](https://youtu.be/qa-XleqA0JU?t=290) -- [00:05:17 Метод array.pop](https://youtu.be/qa-XleqA0JU?t=317) -- [00:05:55 Оператор typeof](https://youtu.be/qa-XleqA0JU?t=355) -- [00:08:33 Метод Array.isArray](https://youtu.be/qa-XleqA0JU?t=513) -- [00:10:06 Оператор instanceof](https://youtu.be/qa-XleqA0JU?t=606) -- [00:10:48 Undefined](https://youtu.be/qa-XleqA0JU?t=648) -- [00:11:12 Null](https://youtu.be/qa-XleqA0JU?t=672) -- [00:11:55 NaN](https://youtu.be/qa-XleqA0JU?t=715) -- [00:14:18 Infinity](https://youtu.be/qa-XleqA0JU?t=858) -- [00:14:48 Тернарный оператор](https://youtu.be/qa-XleqA0JU?t=888) -- [00:16:15 Функция paseInt](https://youtu.be/qa-XleqA0JU?t=975) -- [00:24:23 Функция paseFloat](https://youtu.be/qa-XleqA0JU?t=1463) -- [00:27:15 Удаление переменных ](https://youtu.be/qa-XleqA0JU?t=1635) -- [00:33:25 Побитовые операторы (Bitwise operators)](https://youtu.be/qa-XleqA0JU?t=2005) -- [00:34:38 Побитовые операции](https://youtu.be/qa-XleqA0JU?t=2078) -- [00:44:30 BigInt](https://youtu.be/qa-XleqA0JU?t=2670) -- [00:56:30 Операторы сравнения ](https://youtu.be/qa-XleqA0JU?t=3390) -- [01:01:20 Очередность операторов (Operator precedence)](https://youtu.be/qa-XleqA0JU?t=3680) -- [01:13:25 Оператор Switch](https://youtu.be/qa-XleqA0JU?t=4405) - -## [Семинар: Базовый синтаксис языка JavaScript](https://youtu.be/PGqjTXQe_qw) - -## [Семинар: автоматическая проверка лабораторных работ](https://youtu.be/M4KpG0LEAyA) - -## [Введение в программирование (2 часть)](https://youtu.be/PzlLXQ3RaDs) - -- [0:00:01 введение](https://youtu.be/PzlLXQ3RaDs?t=1) -- [0:01:45 процедура или подпрограмма / Procedure or Subroutine](https://youtu.be/PzlLXQ3RaDs?t=105) -- [0:06:05 функция / Function](https://youtu.be/PzlLXQ3RaDs?t=365) -- [0:09:27 стек вызовов / Call Stack 0:18:26 Mixed Solution 0:21:42 принцип LIFO](https://youtu.be/PzlLXQ3RaDs?t=567) -- [0:22:09 куча и стек / Heap and Stack](https://youtu.be/PzlLXQ3RaDs?t=1329) -- [0:25:55 рекурсия / Recursion](https://youtu.be/PzlLXQ3RaDs?t=1555) -- [0:27:15 коллекция / Collection](https://youtu.be/PzlLXQ3RaDs?t=1635) -- [0:27:51 массив / Array](https://youtu.be/PzlLXQ3RaDs?t=1671) -- [0:28:18 отладка / Debug](https://youtu.be/PzlLXQ3RaDs?t=1698) -- [0:28:23 компонент / Component](https://youtu.be/PzlLXQ3RaDs?t=1703) -- [0:29:37 модуль / Module 0:30:16 модульность / Modularity 0:33:52 ограничения 0:31:50 заглушки / Stubs](https://youtu.be/PzlLXQ3RaDs?t=1777) -- [0:36:19 библиотека / Library](https://youtu.be/PzlLXQ3RaDs?t=2179) -- [0:37:13 импорт и экспорт идентификаторов / Import and Export Identifiers 0:41:30 новый синтаксис](https://youtu.be/PzlLXQ3RaDs?t=2233) -- [0:45:22 объект или экземпляр / Object or Instance 0:47:08 2 способа задания Instance](https://youtu.be/PzlLXQ3RaDs?t=2722) -- [0:47:47 класс / Class 0:49:16 примеры](https://youtu.be/PzlLXQ3RaDs?t=2867) -- [0:51:30 инстанциирование / Instantiation 0:52:59 примеры](https://youtu.be/PzlLXQ3RaDs?t=3090) -- [0:54:59 область видимости / Scope](https://youtu.be/PzlLXQ3RaDs?t=3299) -- [0:57:05 лексический(ое) контекст (окружение) / Lexical environment](https://youtu.be/PzlLXQ3RaDs?t=3425) -- [0:58:19 объектный контекст функции / Object context: this](https://youtu.be/PzlLXQ3RaDs?t=3499) -- [1:00:33 глобальный контекст / Global context](https://youtu.be/PzlLXQ3RaDs?t=3633) -- [1:04:35 монады](https://youtu.be/PzlLXQ3RaDs?t=3875) -- [1:09:00 парадигмы программирования](https://youtu.be/PzlLXQ3RaDs?t=4140) -- [1:12:05 лямбда-функция](https://youtu.be/PzlLXQ3RaDs?t=4325) -- [1:12:28 фрейм](https://youtu.be/PzlLXQ3RaDs?t=4348) -- [1:14:46 строка в свойстве объекта](https://youtu.be/PzlLXQ3RaDs?t=4486) -- [1:16:21 класс и объект](https://youtu.be/PzlLXQ3RaDs?t=4581) -- [1:16:47 класс и прототип](https://www.youtube.com/watch?v=PzlLXQ3RaDs&t=4607) -- [1:17:37 аллокирование значений в куче и стеке](https://youtu.be/PzlLXQ3RaDs?t=4607) -- [1:18:43 сборщик мусора](https://youtu.be/PzlLXQ3RaDs?t=4723) -- [1:20:29 терминология на английском и русском](https://youtu.be/PzlLXQ3RaDs?t=4829) - -## [Функции, лямбды (стрелочные функции), контексты, замыкания в JavaScript](https://youtu.be/pn5myCmpV2U) - -- [00:00:00 Введение ](https://youtu.be/pn5myCmpV2U?t=0) -- [00:11:22 Функция объявление (Declaration)](https://youtu.be/pn5myCmpV2U?t=682) -- [00:12:46 Функция выражение (Expression)](https://youtu.be/pn5myCmpV2U?t=766) -- [00:16:07 Лямбда-выражение (Lambda expression) или функция-стрелка (Arrow function) ](https://youtu.be/pn5myCmpV2U?t=967) -- [00:16:43 Лямбда-функция (Lambda function) ](https://youtu.be/pn5myCmpV2U?t=1003) -- [00:18:45 Область видимости (Scope)](https://youtu.be/pn5myCmpV2U?t=1125) -- [00:25:00 Функции, как абстракции](https://youtu.be/pn5myCmpV2U?t=1500) -- [00:26:43 Методы функции (name, length, toString( ) )](https://youtu.be/pn5myCmpV2U?t=1603) -- [00:31:26 Значения по умолчанию у функции ](https://youtu.be/pn5myCmpV2U?t=1886) -- [00:36:46 Rest-оператор (...args)](https://youtu.be/pn5myCmpV2U?t=2206) -- [00:41:49 Способ определения функции, через new Function](https://youtu.be/pn5myCmpV2U?t=2509) -- [00:44:46 Функции внутри объекта](https://youtu.be/pn5myCmpV2U?t=2686) -- [00:50:42 Обращение к полям объекта из привязанной функции, через this](https://youtu.be/pn5myCmpV2U?t=3042) -- [00:55:24 История синтаксиса создания контекстов, через самовызывающиеся функции ( IIFE)](https://youtu.be/pn5myCmpV2U?t=3324) -- [00:58:30 Методы функции, наследуемой от объекта (call, apply)](https://youtu.be/pn5myCmpV2U?t=3510) -- [01:00:53 Комментирование функций](https://youtu.be/pn5myCmpV2U?t=3653) -- [01:01:27 Задание декомпозиции функции](https://youtu.be/pn5myCmpV2U?t=3687) -- [01:04:24 Замыкание: context ](https://youtu.be/pn5myCmpV2U?t=3864) -- [01:08:41 Замыкание: chainning ](https://youtu.be/pn5myCmpV2U?t=4121) -- [01:11:55 Замыкание: summator ](https://youtu.be/pn5myCmpV2U?t=4315) -- [01:14:16 Замыкание: recursion](https://youtu.be/pn5myCmpV2U?t=4456) - -## [Массивы, объекты, классы, прототипы в JavaScript](https://youtu.be/VBMGnAPfmsY) - -- [00:00:00 Объекты](https://youtu.be/VBMGnAPfmsY?t=0) -- [00:11:01 Массивы](https://youtu.be/VBMGnAPfmsY?t=661) -- [00:13:29 Cериализация объекта ](https://youtu.be/VBMGnAPfmsY?t=809) -- [00:15:46 Cериализация массива ](https://youtu.be/VBMGnAPfmsY?t=946) -- [00:19:20 Методы array](https://youtu.be/VBMGnAPfmsY?t=1160) -- [00:20:22 Циклы ](https://youtu.be/VBMGnAPfmsY?t=1222) -- [00:21:16 Цикл for-in-object ](https://youtu.be/VBMGnAPfmsY?t=1276) -- [00:22:02 Цикл for-in-array](https://youtu.be/VBMGnAPfmsY?t=1322) -- [00:24:10 Цикл for-of-array ](https://youtu.be/VBMGnAPfmsY?t=1450) -- [00:25:05 Метод array.forEach](https://youtu.be/VBMGnAPfmsY?t=1505) -- [00:29:10 Метод array.map](https://youtu.be/VBMGnAPfmsY?t=1750) -- [00:33:59 Итерация матрицы, через for-of-array](https://youtu.be/VBMGnAPfmsY?t=2039) -- [00:38:38 Итерация матрицы, через array.forEach](https://youtu.be/VBMGnAPfmsY?t=2318) -- [00:39:22 Итерация матрицы, через for-in-array](https://youtu.be/VBMGnAPfmsY?t=2362) -- [00:39:45 Метод array.reduce](https://youtu.be/VBMGnAPfmsY?t=2385) -- [00:44:39 Методы объекта](https://youtu.be/VBMGnAPfmsY?t=2679) -- [00:46:38 Прототип](https://youtu.be/VBMGnAPfmsY?t=2798) -- [00:53:32 Класс ](https://youtu.be/VBMGnAPfmsY?t=3212) -- [00:56:04 Связывание методов с объектом, при помощи замыкания](https://youtu.be/VBMGnAPfmsY?t=3364) -- [01:00:08 Связывание методов с объектом, при помощи метода bind](https://youtu.be/VBMGnAPfmsY?t=3608) -- [01:03:19 Пример абстракции, при помощи замыкания](https://youtu.be/VBMGnAPfmsY?t=3799) -- [01:11:05 Пример абстракции, при помощи прототипа](https://youtu.be/VBMGnAPfmsY?t=4265) -- [01:12:30 Пример абстракции, при помощи класса](https://youtu.be/VBMGnAPfmsY?t=4350) -- [01:13:08 Наследование через синтаксис прототипов](https://youtu.be/VBMGnAPfmsY?t=4388) -- [01:18:50 Наследование через синтаксис классов ](https://youtu.be/VBMGnAPfmsY?t=4730) -- [01:21:05 Связывание объекта с методом класса при помощи прототипа ](https://youtu.be/VBMGnAPfmsY?t=4865) -- [01:23:52 Присваивание методов внутри конструктора, при прототипном подходе ](https://youtu.be/VBMGnAPfmsY?t=5032) -- [01:25:10 Get/Set класса ](https://youtu.be/VBMGnAPfmsY?t=5110) -- [01:27:00 Пример](https://youtu.be/VBMGnAPfmsY?t=5220) - -## [Языки программирования: обзор, сравнение, выбор](https://youtu.be/enHA1CRkJe0) - -- [0:00:02 обзорная лекция о классификации ЯП](https://youtu.be/enHA1CRkJe0?t=2) -- [0:00:53 типизация: статическая / динамическая](https://youtu.be/enHA1CRkJe0?t=53) -- [0:07:37 сильная / слабая || строгая / нестрогая](https://youtu.be/enHA1CRkJe0?t=457) -- [0:10:08 явная / неявная](https://youtu.be/enHA1CRkJe0?t=608) -- [0:13:58 утиная 0:18:26 протоколы](https://youtu.be/enHA1CRkJe0?t=838) -- [0:20:36 ниже и ближе к машине / выше и ближе к человеку](https://youtu.be/enHA1CRkJe0?t=1236) -- [0:32:20 сравнение asm и машинного кода](https://youtu.be/enHA1CRkJe0?t=1940) -- [0:39:38 сравнение asm и js](https://youtu.be/enHA1CRkJe0?t=2378) -- [0:42:47 функции и типы 1 класса](https://youtu.be/enHA1CRkJe0?t=2567) -- [0:44:39 распространённость](https://youtu.be/enHA1CRkJe0?t=2679) -- [0:45:47 скорость, читаемость](https://youtu.be/enHA1CRkJe0?t=2747) -- [0:48:21 владение правами / влияние на ЯП](https://youtu.be/enHA1CRkJe0?t=2901) -- [0:51:13 специализация](https://youtu.be/enHA1CRkJe0?t=3073) -- [0:53:13 наследственность](https://youtu.be/enHA1CRkJe0?t=3193) -- [0:56:33 инструментарий](https://youtu.be/enHA1CRkJe0?t=3393) -- [0:58:20 поддержка](https://youtu.be/enHA1CRkJe0?t=3500) -- [1:02:58 скорость развития](https://youtu.be/enHA1CRkJe0?t=3778) -- [1:04:12 системное программирование](https://youtu.be/enHA1CRkJe0?t=3852) -- [1:05:51 оконные приложения](https://youtu.be/enHA1CRkJe0?t=3951) -- [1:06:27 встраиваемые системы и автоматизация](https://youtu.be/enHA1CRkJe0?t=3987) -- [1:07:02 базы данных](https://youtu.be/enHA1CRkJe0?t=4022) -- [1:07:45 сетевые сервера](https://youtu.be/enHA1CRkJe0?t=4065) -- [1:09:03 вычисления](https://youtu.be/enHA1CRkJe0?t=4143) -- [1:10:45 ИИ](https://youtu.be/enHA1CRkJe0?t=4245) -- [1:11:52 параллельные вычисления, веб](https://youtu.be/enHA1CRkJe0?t=4312) -- [1:12:38 скрипты](https://youtu.be/enHA1CRkJe0?t=4358) -- [1:13:36 тестирование](https://youtu.be/enHA1CRkJe0?t=4416) -- [1:14:20 мобильные платформы](https://youtu.be/enHA1CRkJe0?t=4460) -- [1:16:10 игры, графика](https://youtu.be/enHA1CRkJe0?t=4570) - -## [JavaScript: Ответы на вопросы](https://youtu.be/wqkQ6eslyzY) - -- [0:00:02 введение](https://youtu.be/wqkQ6eslyzY?t=2) -- [0:00:41 разделение ЯП по модели работы с памятью](https://youtu.be/wqkQ6eslyzY?t=41) -- [0:08:32 почему надо использовать const, реже let и избегать var](https://youtu.be/wqkQ6eslyzY?t=512) -- [0:17:43 + и - утиной типизации](https://youtu.be/wqkQ6eslyzY?t=1063) -- [0:30:03 примеры ЯП с разной типизацией](https://youtu.be/wqkQ6eslyzY?t=1803) -- [0:32:29 чем выше ЯП, тем он медленнее?](https://youtu.be/wqkQ6eslyzY?t=1949) -- [0:34:15 почему бы js не компилировать напрямую в машинный код](https://youtu.be/wqkQ6eslyzY?t=2055) -- [0:35:37 скорость и производительность ЯП](https://youtu.be/wqkQ6eslyzY?t=2137) -- [0:40:47 константы и ключевое слово const](https://youtu.be/wqkQ6eslyzY?t=2447) -- [0:45:48 зачем учить именно js](https://youtu.be/wqkQ6eslyzY?t=2748) -- [0:59:28 typescript - js с типами? Развитость инфраструктуры ts](https://youtu.be/wqkQ6eslyzY?t=3568) - -## [Частичное применение и каррирование в JavaScript](https://youtu.be/ND8KQ5xjk7o) - -- [00:00:00 Замыкание](https://youtu.be/ND8KQ5xjk7o?t=0) -- [00:04:54 Лямбда- функция](https://youtu.be/ND8KQ5xjk7o?t=294) -- [00:06:06 Метод bind](https://youtu.be/ND8KQ5xjk7o?t=366) -- [00:08:30 Абстрагированный пример функции](https://youtu.be/ND8KQ5xjk7o?t=510) -- [00:13:42 Абстрагированный пример функции (расширение)](https://youtu.be/ND8KQ5xjk7o?t=822) -- [00:15:47 Неправильная реализация каррирования](https://youtu.be/ND8KQ5xjk7o?t=947) -- [00:22:22 Правильная реализация каррирования](https://youtu.be/ND8KQ5xjk7o?t=1342) -- [00:28:54 Правильная реализация каррирования (расширение)](https://youtu.be/ND8KQ5xjk7o?t=1734) -- [00:31:41 Функциональные абстракции (superposition)](https://youtu.be/ND8KQ5xjk7o?t=1901) -- [00:38:02 Функциональные абстракции, с сохранением выражений (composition)](https://youtu.be/ND8KQ5xjk7o?t=2282) -- [00:45:05 Композиция с 2 функциями](https://youtu.be/ND8KQ5xjk7o?t=2705) -- [00:46:05 Композиция с n - функциями, при помощи метода reduce](https://youtu.be/ND8KQ5xjk7o?t=2765) -- [00:51:25 Композиция с n - функциями, при помощи цикла](https://youtu.be/ND8KQ5xjk7o?t=3085) -- [00:54:29 Композиция с n - функциями, при помощи рекурсии](https://youtu.be/ND8KQ5xjk7o?t=3269) -- [00:57:40 Композиция асинхронных функций](https://youtu.be/ND8KQ5xjk7o?t=3460) -- [01:01:27 Обобщение](https://youtu.be/ND8KQ5xjk7o?t=3687) - -## [Функции высшего порядка, колбеки, события на JavaScript](https://youtu.be/1vqATwbGHnc) - -- [00:00:00 Определение](https://youtu.be/1vqATwbGHnc?t=0) -- [00:02:03 Математическая функция](https://youtu.be/1vqATwbGHnc?t=123) -- [00:05:57 Функция обратного вызова (callback) ](https://youtu.be/1vqATwbGHnc?t=357) -- [00:09:33 Замыкание](https://youtu.be/1vqATwbGHnc?t=573) -- [00:10:51 Цепочка вызовов ](https://youtu.be/1vqATwbGHnc?t=651) -- [00:12:40 Сохранение кэша с помощью замыкания](https://youtu.be/1vqATwbGHnc?t=760) -- [00:18:29 Добавление функции поведение логирования](https://youtu.be/1vqATwbGHnc?t=1109) -- [00:21:45 Обобщение](https://youtu.be/1vqATwbGHnc?t=1305) -- [00:22:45 Сallback](https://youtu.be/1vqATwbGHnc?t=1365) -- [00:25:32 Сallback асинхронной функции считывание файла](https://youtu.be/1vqATwbGHnc?t=1532) -- [00:28:36 Сallback именованный](https://youtu.be/1vqATwbGHnc?t=1716) -- [00:33:01 Сallback-timer ](https://youtu.be/1vqATwbGHnc?t=1981) -- [00:36:20 Сallback-timer-curry](https://youtu.be/1vqATwbGHnc?t=2180) -- [00:38:59 Listener](https://youtu.be/1vqATwbGHnc?t=2339) -- [00:41:10 Listener-timer](https://youtu.be/1vqATwbGHnc?t=2470) -- [00:46:59 Event](https://youtu.be/1vqATwbGHnc?t=2819) -- [00:53:45 Event-imitter](https://youtu.be/1vqATwbGHnc?t=3225) -- [00:57:48 Deferred object (отложенный объект)](https://youtu.be/1vqATwbGHnc?t=3468) -- [01:01:31 Errors](https://youtu.be/1vqATwbGHnc?t=3691) - -## [Работа со строками, шаблонами и юникодом в JavaScript](https://youtu.be/GcopcHQkA8M) - -- [00:00:00 Unicode строки](https://youtu.be/GcopcHQkA8M?t=0) -- [00:12:07 Обычные строки](https://youtu.be/GcopcHQkA8M?t=727) -- [00:17:03 Методы строки ](https://youtu.be/GcopcHQkA8M?t=1023) -- [00:23:09 Модификация строк ](https://youtu.be/GcopcHQkA8M?t=1389) -- [00:28:00 Получение подстроки в строке ](https://youtu.be/GcopcHQkA8M?t=1680) -- [00:34:45 Polyffill ](https://youtu.be/GcopcHQkA8M?t=2085) -- [00:37:54 Методы padEnd и padStart ](https://youtu.be/GcopcHQkA8M?t=2274) -- [00:40:45 Добавление функции для шаблонизирующей строки](https://youtu.be/GcopcHQkA8M?t=2445) -- [00:44:27 Пример ](https://youtu.be/GcopcHQkA8M?t=2667) -- [00:48:29 Библиотека Concolor.js](https://youtu.be/GcopcHQkA8M?t=2909) - -## [Регулярные выражения и парсинг в JavaScript](https://youtu.be/-ef2E0ozxao) - -- [00:00:00 Введение](https://youtu.be/-ef2E0ozxao?t=0) -- [00:10:30 Синтаксис регулярных выражений ](https://youtu.be/-ef2E0ozxao?t=630) -- [00:12:54 Задание регулярного выражения ](https://youtu.be/-ef2E0ozxao?t=774) -- [00:30:38 RegExp ](https://youtu.be/-ef2E0ozxao?t=1838) -- [00:38:11 Метод match ](https://youtu.be/-ef2E0ozxao?t=2291) -- [00:46:48 Метод split](https://youtu.be/-ef2E0ozxao?t=2808) -- [00:49:28 Метод replace ](https://youtu.be/-ef2E0ozxao?t=2968) -- [00:50:43 Метод replace с аргументом функции ](https://youtu.be/-ef2E0ozxao?t=3043) -- [00:53:28 Метод search ](https://youtu.be/-ef2E0ozxao?t=3208) -- [00:55:05 Обобщение](https://youtu.be/-ef2E0ozxao?t=3305) - -## [Примеси, обертки, декораторы, мемоизация в JavaScript](https://youtu.be/oRQ0kQr1N-U) - -- [00:00:00 Синхронная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=0) -- [00:02:55 Синхронная универсальная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=175) -- [00:08:28 Асинхронная универсальная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=508) -- [00:15:50 Синхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/oRQ0kQr1N-U?t=950) -- [00:22:45 Асинхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/oRQ0kQr1N-U?t=1365) -- [00:25:38 Функция-обертка, которая ограничивает вызов функции до одного вызова (once) ](https://youtu.be/oRQ0kQr1N-U?t=1538) -- [00:27:36 Функция-обертка, которая ограничивает вызов функции до n-го вызова (limit)](https://youtu.be/oRQ0kQr1N-U?t=1656) -- [00:29:50 Функция-обертка, которая отменяет вызов функции (cancel)](https://youtu.be/oRQ0kQr1N-U?t=1790) -- [00:32:29 Функция-обертка с методами timeout, limit, cancel](https://youtu.be/oRQ0kQr1N-U?t=1949) -- [00:39:03 Функция-обертка с методами timeout, limit, cancel (оптимизированная)](https://youtu.be/oRQ0kQr1N-U?t=2343) -- [00:42:28 Функция-обертка, которая ограничивает один вызов за 200 мс (throttle)](https://youtu.be/oRQ0kQr1N-U?t=2548) -- [00:45:47 Примесь поля через точку ](https://youtu.be/oRQ0kQr1N-U?t=2747) -- [00:51:35 Примесь поля через функцию extend](https://youtu.be/oRQ0kQr1N-U?t=3095) -- [00:57:35 Примесь поля через object.assign( )](https://youtu.be/oRQ0kQr1N-U?t=3455) -- [00:59:18 Примесь поведения ](https://youtu.be/oRQ0kQr1N-U?t=3558) -- [01:02:23 Примесь изменения класса](https://youtu.be/oRQ0kQr1N-U?t=3743) -- [01:06:50 Определение](https://youtu.be/oRQ0kQr1N-U?t=4010) -- [01:07:30 Реализация простой мемоизации ](https://youtu.be/oRQ0kQr1N-U?t=4050) -- [01:14:43 Реализация простой мемоизации с проверкой скорости ](https://youtu.be/oRQ0kQr1N-U?t=4483) -- [01:20:43 Удаление накопленного кэша ](https://youtu.be/oRQ0kQr1N-U?t=4843) -- [01:25:35 Асинхронная мемоизация ](https://youtu.be/oRQ0kQr1N-U?t=5135) -- [01:31:10 Преобразование аргументов и ключей в hash-функцию](https://youtu.be/oRQ0kQr1N-U?t=5470) -- [01:33:32 Реализация сложной мемоизации](https://youtu.be/oRQ0kQr1N-U?t=5612) - -## [Консоль и командная строка в JavaScript и Node.js](https://youtu.be/5aSZyKi5BmE) - -- [1:20 console](https://youtu.be/5aSZyKi5BmE?t=80) -- [16:00 readline](https://youtu.be/5aSZyKi5BmE?t=960) -- [21:35 cli](https://youtu.be/5aSZyKi5BmE?t=1295) -- [31:15 делаем красивый login screen](https://youtu.be/5aSZyKi5BmE?t=1875) - -## [Чеининг функций и объектов, обработка ошибок в JavaScript](https://youtu.be/PfuEfIiLX34) - -- [00:00:00 Введение ](https://youtu.be/PfuEfIiLX34?t=0) -- [00:01:10 Чеининг через синтаксис вызова функций ](https://youtu.be/PfuEfIiLX34?t=70) -- [00:02:12 Prototype ](https://youtu.be/PfuEfIiLX34?t=132) -- [00:05:45 Сlass](https://youtu.be/PfuEfIiLX34?t=345) -- [00:06:11 Functor](https://youtu.be/PfuEfIiLX34?t=371) -- [00:11:54 Mutable](https://youtu.be/PfuEfIiLX34?t=714) -- [00:16:34 Iterator](https://youtu.be/PfuEfIiLX34?t=994) -- [00:26:18 Promise ](https://youtu.be/PfuEfIiLX34?t=1578) -- [00:26:35 Test](https://youtu.be/PfuEfIiLX34?t=1595) -- [00:37:08 Compare ](https://youtu.be/PfuEfIiLX34?t=2228) -- [00:39:45 Benchmark](https://youtu.be/PfuEfIiLX34?t=2385) -- [00:40:48 Запуск и анализ тестов ](https://youtu.be/PfuEfIiLX34?t=2448) -- [01:03:48 Первый способ возвращение ошибок в синхронном коде ](https://youtu.be/PfuEfIiLX34?t=3828) -- [01:09:24 Второй способ возвращение ошибок в синхронном коде ](https://youtu.be/PfuEfIiLX34?t=4164) -- [01:12:26 Возвращение ошибок в асинхронном коде ](https://youtu.be/PfuEfIiLX34?t=4346) -- [01:16:14 Корректное возвращение ошибок ](https://youtu.be/PfuEfIiLX34?t=4574) -- [01:20:03 Обработка ошибок c promise ](https://youtu.be/PfuEfIiLX34?t=4803) -- [01:23:58 Обработка ошибок c async-await](https://youtu.be/PfuEfIiLX34?t=5038) - -## [Таймеры, таймауты, EventEmitter в JavaScript и Node.js](https://youtu.be/LK2jveAnRNg) - -- [0:30 callback sync/async](https://youtu.be/LK2jveAnRNg?t=30) -- [1:35 временная задержка sleep.js](https://youtu.be/LK2jveAnRNg?t=95) -- [5:35 await-sleep.js](https://youtu.be/LK2jveAnRNg?t=335) -- [8:40 sleep-then.js](https://youtu.be/LK2jveAnRNg?t=520) -- [9:30 order.js](https://youtu.be/LK2jveAnRNg?t=570) -- [18:38 precision.js](https://youtu.be/LK2jveAnRNg?t=1118) -- [22:13 blocking.js](https://youtu.be/LK2jveAnRNg?t=1333) -- [22:50 timers.js](https://youtu.be/LK2jveAnRNg?t=1370) -- [29:35 ref-unref.js](https://youtu.be/LK2jveAnRNg?t=1775) -- [32:05 enroll.js](https://youtu.be/LK2jveAnRNg?t=1925) -- [34:57 eventloop.txt](https://youtu.be/LK2jveAnRNg?t=2097) -- [37:37 eventEmitter](https://youtu.be/LK2jveAnRNg?t=2257) -- [44:32 simple.js](https://youtu.be/LK2jveAnRNg?t=2672) -- [47:48 usage.js](https://youtu.be/LK2jveAnRNg?t=2868) -- [48:30 enhanced.js](https://youtu.be/LK2jveAnRNg?t=2910) -- [50:18 star-fix.js](https://youtu.be/LK2jveAnRNg?t=3018) -- [51:10 usage.js](https://youtu.be/LK2jveAnRNg?t=3070) -- [53:15 closure.js](https://youtu.be/LK2jveAnRNg?t=3195) -- [54:50 fp.js](https://youtu.be/LK2jveAnRNg?t=3290) -- [57:10 methods.js](https://youtu.be/LK2jveAnRNg?t=3430) -- [1:06:35 min.js](https://youtu.be/LK2jveAnRNg?t=3995) -- [1:12:31 prod.js](https://youtu.be/LK2jveAnRNg?t=4351) - -## [Итерирование, циклы и итераторы в JavaScript](https://youtu.be/lq3b5_UGJas) - -- [00:00:00 Цикл for](https://youtu.be/lq3b5_UGJas?t=0) -- [00:02:45 Цикл while](https://youtu.be/lq3b5_UGJas?t=165) -- [00:03:16 Цикл do while ](https://youtu.be/lq3b5_UGJas?t=196) -- [00:03:33 Цикл for in object ](https://youtu.be/lq3b5_UGJas?t=213) -- [00:04:40 Цикл for in array](https://youtu.be/lq3b5_UGJas?t=280) -- [00:06:44 Цикл for of](https://youtu.be/lq3b5_UGJas?t=404) -- [00:08:45 Оператор break](https://youtu.be/lq3b5_UGJas?t=525) -- [00:10:13 Оператор continue](https://youtu.be/lq3b5_UGJas?t=613) -- [00:12:12 Итерирование по массиву методом forEach](https://youtu.be/lq3b5_UGJas?t=732) -- [00:15:10 Итерирование по массиву методом map ](https://youtu.be/lq3b5_UGJas?t=910) -- [00:21:23 Итерирование по двухмерному массиву (мatrix)](https://youtu.be/lq3b5_UGJas?t=1283) -- [00:25:38 Итерирование по двухмерному массиву (мatrix) методом forEach](https://youtu.be/lq3b5_UGJas?t=1538) -- [00:26:08 Итерирование массива методом reduce](https://youtu.be/lq3b5_UGJas?t=1568) -- [00:28:49 Итерирование по объекту ](https://youtu.be/lq3b5_UGJas?t=1729) -- [00:37:32 Обратный итератор ](https://youtu.be/lq3b5_UGJas?t=2252) -- [00:40:42 Асинхронный итератор](https://youtu.be/lq3b5_UGJas?t=2442) - -## [Архитектурный подход к программированию](https://youtu.be/d_vyO2CkiOc) - -- [00:00:00 Когда нужна архитектура](https://youtu.be/d_vyO2CkiOc?t=0) -- [00:06:07 Принятие решений](https://youtu.be/d_vyO2CkiOc?t=367) -- [00:09:58 Типы связывания](https://youtu.be/d_vyO2CkiOc?t=598) -- [00:20:00 Ошибки](https://youtu.be/d_vyO2CkiOc?t=1200) -- [00:27:15 Принятие решений](https://youtu.be/d_vyO2CkiOc?t=1635) -- [00:37:05 Эволюция архитектурных решений](https://youtu.be/d_vyO2CkiOc?t=2225) -- [00:58:13 Схема современной архитектуры](https://youtu.be/d_vyO2CkiOc?t=3493) -- [01:01:40 субд в браузере](https://youtu.be/d_vyO2CkiOc?t=3700) -- [01:05:20 Альтернативные варианты](https://youtu.be/d_vyO2CkiOc?t=3920) -- [01:12:20 Как на самом деле](https://youtu.be/d_vyO2CkiOc?t=4340) -- [01:13:45 Архитектура мечты](https://youtu.be/d_vyO2CkiOc?t=4425) -- [01:16:45 Современные возможности и требования ](https://youtu.be/d_vyO2CkiOc?t=4605) -- [01:25:20 Топологии](https://youtu.be/d_vyO2CkiOc?t=5120) -- [01:30:45 Итог](https://youtu.be/d_vyO2CkiOc?t=5445) - -## [Функциональное программирование на JavaScript](https://youtu.be/0JxSs_GcvbQ) - -## [Реактивное программирование на JavaScript](https://youtu.be/7MH8-qQc-48) - -- [0:00 введение](https://youtu.be/7MH8-qQc-48?t=0) -- [3:00 imperative.js](https://youtu.be/7MH8-qQc-48?t=180) -- [4:00 set-get.js](https://youtu.be/7MH8-qQc-48?t=240) -- [7:15 proxy.js](https://youtu.be/7MH8-qQc-48?t=435) -- [23:07 observer.js](https://youtu.be/7MH8-qQc-48?t=1387) - -## [Асинхронное программирование на callback`ах в JavaScript](https://youtu.be/z8Hg6zgi3yQ) - -- [1:20 пример callback функции](https://youtu.be/z8Hg6zgi3yQ?t=80) -- [2:40 пример последовательного исполнения callback функций](https://youtu.be/z8Hg6zgi3yQ?t=160) -- [5:52 пример параллельного исполнения async функций c использованием wrapAsync](https://youtu.be/z8Hg6zgi3yQ?t=352) -- [15:18 пример последовательного исполнения async функций c использованием wrapAsync](https://youtu.be/z8Hg6zgi3yQ?t=918) -- [19:05 chain исполнение async функций](https://youtu.be/z8Hg6zgi3yQ?t=1145) -- [41:16 где можно встретить асинхронные функции](https://youtu.be/z8Hg6zgi3yQ?t=2476) - -## [Проекции и отображения наборов данных в JavaScript](https://youtu.be/lwJCq9inky8) - -- [00:00:00 Введение ](https://youtu.be/lwJCq9inky8?t=0) -- [00:01:50 Простая проекция набора данных ](https://youtu.be/lwJCq9inky8?t=110) -- [00:09:23 Расширенная проекция набора данных ](https://youtu.be/lwJCq9inky8?t=563) -- [00:19:00 Расширенная проекция набора данных с кэшированием списка ключей](https://youtu.be/lwJCq9inky8?t=1140) -- [00:20:27 Оптимизация проекции набора данных с помощью императивного программирования ](https://youtu.be/lwJCq9inky8?t=1227) -- [00:23:11 Линзы из функционального программирования ](https://youtu.be/lwJCq9inky8?t=1391) -- [00:32:29 Сложная проекция набора данных ( проекция изнутри и снаружи ) ](https://youtu.be/lwJCq9inky8?t=1949) -- [00:39:08 Сложная проекция набора данных с помощью декларативного программирования ](https://youtu.be/lwJCq9inky8?t=2348) -- [00:41:57 Оптимизация сложной проекции ](https://youtu.be/lwJCq9inky8?t=2517) -- [00:51:36 Синтаксис фильтрации ](https://youtu.be/lwJCq9inky8?t=3096) -- [00:53:25 Вывод ](https://youtu.be/lwJCq9inky8?t=3205) -- [00:58:08 Оптимизация](https://youtu.be/lwJCq9inky8?t=3488) -- [01:00:00 Обобщение](https://youtu.be/lwJCq9inky8?t=3600) - -## [Коллекции, множества, хештаблицы в JavaScript](https://youtu.be/hN0wsq5LNOc) - -- [00:00:00 Введение](https://youtu.be/hN0wsq5LNOc?t=0) -- [00:01:35 Массивы ](https://youtu.be/hN0wsq5LNOc?t=95) -- [00:01:56 Склеивание массива методом concat ](https://youtu.be/hN0wsq5LNOc?t=116) -- [00:02:02 Склеивание массива оператором spread ](https://youtu.be/hN0wsq5LNOc?t=122) -- [00:03:17 Объекты ](https://youtu.be/hN0wsq5LNOc?t=197) -- [00:03:28 Склеивание объектов методом object.assign ](https://youtu.be/hN0wsq5LNOc?t=208) -- [00:04:01 Склеивание объектов оператором spread ](https://youtu.be/hN0wsq5LNOc?t=241) -- [00:04:38 Символический тип ](https://youtu.be/hN0wsq5LNOc?t=278) -- [00:06:50 Сохранение коллекции в файл ](https://youtu.be/hN0wsq5LNOc?t=410) -- [00:08:45 Использование конструированного map ](https://youtu.be/hN0wsq5LNOc?t=525) -- [00:14:29 Использование встроенного map ](https://youtu.be/hN0wsq5LNOc?t=869) -- [00:15:01 Отличия конструированного и встроенного map](https://youtu.be/hN0wsq5LNOc?t=901) -- [00:16:49 Способы итерации по map ](https://youtu.be/hN0wsq5LNOc?t=1009) -- [00:18:15 Построение индексов помощью map](https://youtu.be/hN0wsq5LNOc?t=1095) -- [00:23:15 WeakMap](https://youtu.be/hN0wsq5LNOc?t=1395) -- [00:27:55 Отдача значения без ключа ](https://youtu.be/hN0wsq5LNOc?t=1675) -- [00:29:15 Хранение уникальных значений ](https://youtu.be/hN0wsq5LNOc?t=1755) -- [00:33:32 Операции со массивами ](https://youtu.be/hN0wsq5LNOc?t=2012) -- [00:39:48 Операции над множествами ](https://youtu.be/hN0wsq5LNOc?t=2388) -- [00:42:32 WeakSet ](https://youtu.be/hN0wsq5LNOc?t=2552) -- [00:47:15 Обобщение](https://youtu.be/hN0wsq5LNOc?t=2835) - -## [Неблокирующее асинхронное итерирование в JavaScript](https://youtu.be/wYA2cIRYLoA) - -- [1:02 блокирующее итерирование по массиву](https://youtu.be/wYA2cIRYLoA?t=62) -- [3:24 блокирующее итерирование с помощью for await](https://youtu.be/wYA2cIRYLoA?t=204) -- [4:47 неблокирующее итерирование с помощью setTimeout](https://youtu.be/wYA2cIRYLoA?t=287) -- [6:45 неблокирующее итерирование с помощью for await](https://youtu.be/wYA2cIRYLoA?t=405) -- [8:20 неблокирующее итерирование без задержки](https://youtu.be/wYA2cIRYLoA?t=500) -- [13:00 неблокирующее итерирование без задержки с помощью for await](https://youtu.be/wYA2cIRYLoA?t=780) -- [19:30 использование асинхронного итерирования для обычных массивов](https://youtu.be/wYA2cIRYLoA?t=1170) - -## [Структуры данных: списки, стек, очередь, дэк в JavaScript](https://youtu.be/9KvA4hDDSjk) - -- [00:00:00 Идея структуры данных](https://youtu.be/9KvA4hDDSjk?t=0) -- [00:02:27 Списки на прототипах ( абстракция элемента ) ](https://youtu.be/9KvA4hDDSjk?t=147) -- [00:06:23 Списки на объектах ](https://youtu.be/9KvA4hDDSjk?t=383) -- [00:07:28 Списки на замыканиях](https://youtu.be/9KvA4hDDSjk?t=448) -- [00:10:56 Списки на объектах ( абстракция элемента и списка ) ](https://youtu.be/9KvA4hDDSjk?t=656) -- [00:18:22 Списки на классах](https://youtu.be/9KvA4hDDSjk?t=1102) -- [00:21:08 Стек на прототипах ( двух-связанный)](https://youtu.be/9KvA4hDDSjk?t=1268) -- [00:28:17 Стек на классах (односвязный)](https://youtu.be/9KvA4hDDSjk?t=1697) -- [00:29:55 Очередь](https://youtu.be/9KvA4hDDSjk?t=1795) -- [00:34:26 Дэк](https://youtu.be/9KvA4hDDSjk?t=2066) - -## [Proxy и Symbol в JavaScript](https://youtu.be/UjZjSDyi9AM) - -- [00:00:00 Определение Proxy](https://youtu.be/UjZjSDyi9AM?t=0) -- [00:01:20 Обращение к свойствам объекта, находящегося внутри proxy](https://youtu.be/UjZjSDyi9AM?t=80) -- [00:04:10 Доступ к состоянию объекта через Getter и Setter ](https://youtu.be/UjZjSDyi9AM?t=250) -- [00:05:13 Доступ к состоянию объекта через Proxy ](https://youtu.be/UjZjSDyi9AM?t=313) -- [00:07:40 Проверка наличие свойств ](https://youtu.be/UjZjSDyi9AM?t=460) -- [00:11:22 Удаление свойств](https://youtu.be/UjZjSDyi9AM?t=682) -- [00:13:26 Обращение к аргументам функции, находящегося внутри proxy ](https://youtu.be/UjZjSDyi9AM?t=806) -- [00:15:30 Другие Proxy обработчики (Proxy handler )](https://youtu.be/UjZjSDyi9AM?t=930) -- [00:19:00 Proxy.revocable ](https://youtu.be/UjZjSDyi9AM?t=1140) -- [00:20:43 Определение Symbol ](https://youtu.be/UjZjSDyi9AM?t=1243) -- [00:23:00 Вывод и сравнение Symbol ](https://youtu.be/UjZjSDyi9AM?t=1380) -- [00:25:10 Type](https://youtu.be/UjZjSDyi9AM?t=1510) -- [00:29:51 Symbol.for](https://youtu.be/UjZjSDyi9AM?t=1791) -- [00:34:45 Symbol.iterator ](https://youtu.be/UjZjSDyi9AM?t=2085) -- [00:43:52 Symbol.toPrimitive](https://youtu.be/UjZjSDyi9AM?t=2632) -- [00:47:00 hideSymbol](https://youtu.be/UjZjSDyi9AM?t=2820) - -## [Сериализация и десериализация в JavaScript и Node.js](https://youtu.be/GtKPniOEzh8) - -- [00:00:00 Введение ](https://youtu.be/GtKPniOEzh8?t=0) -- [00:01:50 Виды сериализации ](https://youtu.be/GtKPniOEzh8?t=110) -- [00:02:45 Сериализатор console.dir ](https://youtu.be/GtKPniOEzh8?t=165) -- [00:03:45 Cериализатор CSV](https://youtu.be/GtKPniOEzh8?t=225) -- [00:05:42 Сериализатор JSON ](https://youtu.be/GtKPniOEzh8?t=342) -- [00:10:00 Сериализатор функции](https://youtu.be/GtKPniOEzh8?t=600) -- [00:15:25 Сериализатор функции разных типов (расширяемый)](https://youtu.be/GtKPniOEzh8?t=925) -- [00:23:06 Десереализация ](https://youtu.be/GtKPniOEzh8?t=1386) -- [00:25:26 Сериализация объекта в бинарный формат, с помощью библиотеки v8 ](https://youtu.be/GtKPniOEzh8?t=1526) -- [00:28:26 Сериализация объекта, с помощью разных библиотек](https://youtu.be/GtKPniOEzh8?t=1706) - -## [Асинхронность с библиотекой async.js](https://youtu.be/XQ94wQc-erU) - -## [Фабрики и пулы объектов в JavaScript, factorify, poolify](https://youtu.be/Ax_mSvadFp8) - -- [00:00:00 Введение ](https://youtu.be/Ax_mSvadFp8?t=0) -- [00:02:38 Фабрика ( factory )](https://youtu.be/Ax_mSvadFp8?t=158) -- [00:05:44 Фабрика прототипов ](https://youtu.be/Ax_mSvadFp8?t=344) -- [00:10:48 Фабрика классов ](https://youtu.be/Ax_mSvadFp8?t=648) -- [00:12:28 Фабрика функций ](https://youtu.be/Ax_mSvadFp8?t=748) -- [00:15:55 Фабричные методы ](https://youtu.be/Ax_mSvadFp8?t=955) -- [00:16:55 Превращение функций в фабрику ( factorify)](https://youtu.be/Ax_mSvadFp8?t=1015) -- [00:19:44 Пул ( pool )](https://youtu.be/Ax_mSvadFp8?t=1184) -- [00:23:05 Работа с пулом ](https://youtu.be/Ax_mSvadFp8?t=1385) -- [00:23:04 Обобщенный пул](https://youtu.be/Ax_mSvadFp8?t=1384) -- [00:24:55 Пулифицирование фабрики ( poolify ) ](https://youtu.be/Ax_mSvadFp8?t=1495) -- [00:28:50 Улучшенная пулифицированная фабрика ](https://youtu.be/Ax_mSvadFp8?t=1730) -- [00:32:10 Асинхронная работа с пулом ](https://youtu.be/Ax_mSvadFp8?t=1930) -- [00:45:25 Одновременное использование factorify и poolify ](https://youtu.be/Ax_mSvadFp8?t=2725) -- [00:51:54 Обобщение](https://youtu.be/Ax_mSvadFp8?t=3114) - -## [Подход к изучению программирования (выступление на дне факультета Информатики КПИ 12 декабря 2018)](https://youtu.be/zMU4ir10DMg) - -- [00:40 Что нужно знать?](https://youtu.be/zMU4ir10DMg?t=40) -- [03:41 Откуда брать знания ](https://youtu.be/zMU4ir10DMg?t=221) -- [07:39 Проблемы отрасли ](https://youtu.be/zMU4ir10DMg?t=459) -- [13:12 Дерево парадигм ](https://youtu.be/zMU4ir10DMg?t=792) -- [14:15 Технологии и техники](https://youtu.be/zMU4ir10DMg?t=855) -- [14:32 Разница парадигм](https://youtu.be/zMU4ir10DMg?t=872) -- [14:48 Что общего в парадигмах](https://youtu.be/zMU4ir10DMg?t=888) -- [15:33 Прочие парадигмы и техники](https://youtu.be/zMU4ir10DMg?t=933) -- [17:46 Мультипарадигменность](https://youtu.be/zMU4ir10DMg?t=1066) -- [18:46 Метапрограммирование](https://youtu.be/zMU4ir10DMg?t=1126) -- [19:13 Как не деградировать?](https://youtu.be/zMU4ir10DMg?t=1153) -- [21:29 Как найти общий язык? ](https://youtu.be/zMU4ir10DMg?t=1289) -- [24:31 Задачи программной инженерии](https://youtu.be/zMU4ir10DMg?t=1471) -- [28:19 Преодоление сложности ](https://youtu.be/zMU4ir10DMg?t=1699) -- [28:21 Связывание данных и логики](https://youtu.be/zMU4ir10DMg?t=1701) -- [28:30 Различные концепции ](https://youtu.be/zMU4ir10DMg?t=1710) -- [29:40 ВУЗ должен меняться](https://youtu.be/zMU4ir10DMg?t=1780) -- [33:53 Неспециальные предметы](https://youtu.be/zMU4ir10DMg?t=2033) -- [35:18 Чего не хватает](https://youtu.be/zMU4ir10DMg?t=2118) -- [36:57 Проблем много ](https://youtu.be/zMU4ir10DMg?t=2217) -- [40:20 ВУЗ должен знать](https://youtu.be/zMU4ir10DMg?t=2420) - -## [Асинхронность на промисах, Promise, all, then, catch, race](https://youtu.be/RMl4r6s1Y8M) - -## [Типизированные массивы в JavaScript](https://youtu.be/tTNcqxbxhfY) - -## [Шаблон Singleton (синглтон) в JavaScript](https://youtu.be/qdJ5yikZnfE) - -- [00:00:00 Singleton через конструктор прототипа](https://youtu.be/qdJ5yikZnfE?t=0) -- [00:03:27 Singleton через замыкания ](https://youtu.be/qdJ5yikZnfE?t=207) -- [00:06:10 Пример singleton через замыкания ](https://youtu.be/qdJ5yikZnfE?t=370) -- [00:08:15 Пример singleton через замыкания в функциональном стиле ](https://youtu.be/qdJ5yikZnfE?t=495) -- [00:09:23 Пример singleton через замыкания в функциональном стиле (упрощенный) ](https://youtu.be/qdJ5yikZnfE?t=563) -- [00:10:32 Создание singleton в JS](https://youtu.be/qdJ5yikZnfE?t=632) - -## [Функциональные объекты, функторы и монады в JavaScript](https://youtu.be/3Z7f0Gi8pxw) - -- [00:00:00 Определение функтора ](https://youtu.be/3Z7f0Gi8pxw?t=0) -- [00:01:40 Функтор из прототипа ](https://youtu.be/3Z7f0Gi8pxw?t=100) -- [00:08:17 Функтор из прототипа (упрощенный) ](https://youtu.be/3Z7f0Gi8pxw?t=497) -- [00:09:14 Функтор из замыкания ](https://youtu.be/3Z7f0Gi8pxw?t=554) -- [00:11:49 Функтор из замыкания с тернарным оператором](https://youtu.be/3Z7f0Gi8pxw?t=709) -- [00:12:44 Аппликативный функтор из прототипа ](https://youtu.be/3Z7f0Gi8pxw?t=764) -- [00:18:08 Аппликативный функтор из замыкания (монада)](https://youtu.be/3Z7f0Gi8pxw?t=1088) -- [00:23:11 Пример применения монады ](https://youtu.be/3Z7f0Gi8pxw?t=1391) -- [00:28:37 Функциональный объект ](https://youtu.be/3Z7f0Gi8pxw?t=1717) -- [00:39:44 Пример применения функционального объекта](https://youtu.be/3Z7f0Gi8pxw?t=2384) -- [00:45:27 Обобщение](https://youtu.be/3Z7f0Gi8pxw?t=2727) - -## [Асинхронные функции, async/await, thenable, обработка ошибок](https://youtu.be/Jdf_tZuJbHI) - -## [Асинхронные адаптеры: promisify, callbackify, asyncify...](https://youtu.be/76k6_YkYRmU) - -## [Асинхронные коллекторы данных](https://youtu.be/tgodt1JL6II) - -## [Утечки памяти в Node.js и JavaScript, сборка мусора и профилирование](https://youtu.be/0oZa64SB2wM) - -## [Рекурсия: косвенная и хвостовая, стек, выход](https://youtu.be/W2skCjIgVKE) - -- [00:00 Рекурсивная функция для вычисления глубины стека](https://youtu.be/W2skCjIgVKE?t=0) -- [03:25 Неявная рекурсия](https://youtu.be/W2skCjIgVKE?t=205) -- [04:52 Рекурсивная функция для вычисления степени числа](https://youtu.be/W2skCjIgVKE?t=292) -- [06:12 Рекурсивная функция для вычисления факториала ](https://youtu.be/W2skCjIgVKE?t=372) -- [06:29 Рекурсивная функция для вычисления числа Фибоначчи ](https://youtu.be/W2skCjIgVKE?t=389) -- [09:27 Рекурсивная функция, как аналог функции reduce ](https://youtu.be/W2skCjIgVKE?t=567) -- [12:04 Оптимизация хвостовой рекурсии ](https://youtu.be/W2skCjIgVKE?t=724) -- [15:41 Оптимизация обычной рекурсивной функции](https://youtu.be/W2skCjIgVKE?t=941) - -## [Дженерики и обобщенное программирование](https://youtu.be/r6W2z3DQhoI) - -## [Генераторы и асинхронные генераторы в JavaScript](https://youtu.be/kvNm9D32s8s) - -- [00:00 Способы объявления генераторов ](https://youtu.be/kvNm9D32s8s?t=0) -- [10:41 Пример генератора с yield ](https://youtu.be/kvNm9D32s8s?t=641) -- [15:54 Пример генератора с yield и return ](https://youtu.be/kvNm9D32s8s?t=954) -- [18:47 Получение значений из генератора циклом for...of ](https://youtu.be/kvNm9D32s8s?t=1127) -- [21:04 Получение значений из генератора spead - оператором ](https://youtu.be/kvNm9D32s8s?t=1264) -- [21:50 Метод next ](https://youtu.be/kvNm9D32s8s?t=1310) -- [23:30 Пример генератора с yield * возвращающего итерируемые объекты ](https://youtu.be/kvNm9D32s8s?t=1410) -- [25:05 Пример генератора с yield * возвращающего другие генераторы ](https://youtu.be/kvNm9D32s8s?t=1505) -- [26:18 Метод return ](https://youtu.be/kvNm9D32s8s?t=1578) -- [28:11 Метод throw](https://youtu.be/kvNm9D32s8s?t=1691) -- [29:05 Обобщение](https://youtu.be/kvNm9D32s8s?t=1745) - -## [Итераторы и асинхронные итераторы в JavaScript](https://youtu.be/rBGFlWpVpGs) - -## [Фасад - петтерн для скрытия сложности](https://youtu.be/oJtBO7CystE) - -## [Адаптер (Adapter) - паттерн достижения совместимости](https://youtu.be/cA65McLQrR8) - -- [0:00 введение](https://youtu.be/cA65McLQrR8?t=0) -- [1:30 adapter на prototype](https://youtu.be/cA65McLQrR8?t=90) -- [3:57 adapter на class](https://youtu.be/cA65McLQrR8?t=237) -- [4:23 adapter на function](https://youtu.be/cA65McLQrR8?t=263) -- [6:15 adapter на классе-обертке (boxing)](https://youtu.be/cA65McLQrR8?t=375) -- [7:08 adapter на замыканиях (closure)](https://youtu.be/cA65McLQrR8?t=428) -- [8:10 adapter на interface](https://youtu.be/cA65McLQrR8?t=490) -- [13:45 adapter на events](https://youtu.be/cA65McLQrR8?t=825) -- [16:00 выводы](https://youtu.be/cA65McLQrR8?t=960) - -## [Стратегия (Strategy) - выбор взаимозаменяемого поведения](https://youtu.be/hO8VSVv0NqM) - -- [0:00 введение](https://youtu.be/hO8VSVv0NqM?t=0) -- [3:40 strategy на class](https://youtu.be/hO8VSVv0NqM?t=220) -- [15:04 strategy на prototype](https://youtu.be/hO8VSVv0NqM?t=904) -- [16:14 strategy на function](https://youtu.be/hO8VSVv0NqM?t=974) -- [20:22 strategy с примером работы над массивом](https://youtu.be/hO8VSVv0NqM?t=1222) -- [24:07 обобщение](https://youtu.be/hO8VSVv0NqM?t=1447) - -## [Линзы в JavaScript - функциональные аналоги геттера и сеттера](https://youtu.be/IBF5gFU6G-o) - -## [Перечислимый тип (enum) в JavaScript и TypeScript](https://youtu.be/BXiKebOIAGI) - -## [Графы и запросы к графовым структурам на JavaScript](https://youtu.be/a0W0T8Yqw3s) - -## [Паттерн Команда (Command) действие и параметры как объект](https://youtu.be/vER0vYL4hM4) - -## [Тестирование: юниттесты с примерами на JavaScript](https://youtu.be/CszugIag2TA) - -## [Инверсия управления и внедрение зависимостей в Node.js](https://youtu.be/Fz86Fdjz-LM) - -## [Слои, связанность и связность кода в JavaScript](https://youtu.be/A3RpwNlVeyY) - -## [Измерение производительности кода и оптимизация в JavaScript и Node.js](https://youtu.be/sanq2X7Re8o) - -- [00:00:00 Введение ](https://youtu.be/sanq2X7Re8o?t=0) -- [00:05:27 Console.time и console.timeEnd ](https://youtu.be/sanq2X7Re8o?t=327) -- [00:09:05 New Date( ).getTime( ) ](https://youtu.be/sanq2X7Re8o?t=545) -- [00:11:15 Process.hrtime( )](https://youtu.be/sanq2X7Re8o?t=675) -- [00:18:51 Process.hrtime.bigint( ) и движок для benchmark](https://youtu.be/sanq2X7Re8o?t=1131) -- [00:27:00 Сравнение функций инстанцирования ](https://youtu.be/sanq2X7Re8o?t=1620) -- [00:31:06 Алгоритм для сравнения ](https://youtu.be/sanq2X7Re8o?t=1866) -- [00:39:36 Работа движка benchmark ](https://youtu.be/sanq2X7Re8o?t=2376) -- [00:41:37 Результаты теста](https://youtu.be/sanq2X7Re8o?t=2497) -- [00:47:33 Сравнение массива и объектов ](https://youtu.be/sanq2X7Re8o?t=2853) -- [00:54:21 Результаты теста ](https://youtu.be/sanq2X7Re8o?t=3261) -- [00:55:00 Сравнение 3 функций range ](https://youtu.be/sanq2X7Re8o?t=3300) -- [00:56:34 Результаты теста ](https://youtu.be/sanq2X7Re8o?t=3394) -- [00:58:50 Сравнение функций по способу вызова](https://youtu.be/sanq2X7Re8o?t=3530) -- [00:59:56 Результаты теста](https://youtu.be/sanq2X7Re8o?t=3596) -- [01:01:34 Сравнение indexOf и includes](https://youtu.be/sanq2X7Re8o?t=3694) -- [01:01:54 Результаты теста ](https://youtu.be/sanq2X7Re8o?t=3714) -- [01:03:23 Сравнение объявления переменной до и после цикла ](https://youtu.be/sanq2X7Re8o?t=3803) -- [01:05:02 Сравнение for keys, for (...in...) и for (...of...)](https://youtu.be/sanq2X7Re8o?t=3902) -- [01:05:34 Результаты теста ](https://youtu.be/sanq2X7Re8o?t=3934) -- [01:05:58 Сравнение шаблонных строк](https://youtu.be/sanq2X7Re8o?t=3958) -- [01:06:12 Сравнение хождения цикла по функции map в ES6](https://youtu.be/sanq2X7Re8o?t=3972) -- [01:07:18 Результаты теста ](https://youtu.be/sanq2X7Re8o?t=4038) -- [01:07:56 Сравнение repeat и arrayJoin ](https://youtu.be/sanq2X7Re8o?t=4076) -- [01:08:15 Результаты теста](https://youtu.be/sanq2X7Re8o?t=4095) -- [01:08:26 Сравнение дублирования массива ](https://youtu.be/sanq2X7Re8o?t=4106) -- [01:08:58 Результаты теста](https://youtu.be/sanq2X7Re8o?t=4138) -- [01:09:43 Сравнение копирование набора данных ](https://youtu.be/sanq2X7Re8o?t=4183) -- [01:10:26 Результаты теста ](https://youtu.be/sanq2X7Re8o?t=4226) -- [01:10:47 Сравнение итерирования с помощью forEarch и for (...of...)](https://youtu.be/sanq2X7Re8o?t=4247) -- [01:11:08 Результаты теста](https://youtu.be/sanq2X7Re8o?t=4268) -- [01:11:31 Обобщение](https://youtu.be/sanq2X7Re8o?t=4291) - -## [Слой доступа к данным, курсор, транзакция](https://youtu.be/CRcSWtWVvrA) - -## [HTTP запросы в браузере и Node.js: XMLHttpRequest, fetch](https://youtu.be/wMMki2FEYGY) - -## [Метапрограммирование с примерами на JavaScript](https://youtu.be/Ed9onRv4G5Y) - -## [Тестирование: системное и интеграционное тестирование на JavaScript](https://youtu.be/OuKu_6H_6gE) - -## [Отмена асинхронных операций, cancellable callback and Promise в JavaScript](https://youtu.be/T8fXlnqI4Ws) - -## [Асинхронная композиция функций на JavaScript](https://youtu.be/3ZCrMlMpOrM) - -## [Thenable и легковесный await в JavaScript](https://youtu.be/DXp__1VNIvI) - -## [Конкурентная асинхронная очередь на JavaScript](https://youtu.be/Lg46AH8wFvg) - -## [Паттерн Revealing Constructor - открытый конструктор](https://youtu.be/leR5sXRkuJI) - -## [Модель акторов для параллельных вычислений](https://youtu.be/xp5MVKEqxY4) - -## [Have Objects Failed? Или что не так с ООП?](https://youtu.be/4yO5OS0vPSw) - -- [1:46 Присвоенные идеи ООП](https://youtu.be/4yO5OS0vPSw?t=106) -- [11:47 Притянутые достоинства ООП](https://youtu.be/4yO5OS0vPSw?t=707) -- [22:06 Проблемы ООП](https://youtu.be/4yO5OS0vPSw?t=1326) -- [39:56 Как жить с ООП](https://youtu.be/4yO5OS0vPSw?t=2396) -- [56:44 Подходящие области для ООП](https://youtu.be/4yO5OS0vPSw?t=3404) -- [1:03:51 Неподходящие области для ООП](https://youtu.be/4yO5OS0vPSw?t=3831) -- [1:11:30 Заключение](https://youtu.be/4yO5OS0vPSw?t=4290) - -## [Интроспекция и рефлексия в JavaScript](https://youtu.be/yvW1PjUVeM0) - -## [История развития языков программирования](https://youtu.be/qqz0VSaNxuw) - -- [0:00:02 введение](https://youtu.be/qqz0VSaNxuw?t=2) -- [0:00:57 карты для механических машин](https://youtu.be/qqz0VSaNxuw?t=57) -- [0:01:50 карты для электронных машин](https://youtu.be/qqz0VSaNxuw?t=110) -- [0:03:21 машинный код](https://youtu.be/qqz0VSaNxuw?t=201) -- [0:04:05 Assembly language](https://youtu.be/qqz0VSaNxuw?t=245) -- [0:06:14 Fortran](https://youtu.be/qqz0VSaNxuw?t=374) -- [0:07:28 Basic](https://youtu.be/qqz0VSaNxuw?t=448) -- [0:09:19 LISP](https://youtu.be/qqz0VSaNxuw?t=559) -- [0:12:23 Algol 60](https://youtu.be/qqz0VSaNxuw?t=743) -- [0:13:25 C](https://youtu.be/qqz0VSaNxuw?t=805) -- [0:14:23 C++](https://youtu.be/qqz0VSaNxuw?t=863) -- [0:15:13 Ada](https://youtu.be/qqz0VSaNxuw?t=913) -- [0:16:08 dBase, FoxBase, Clipper](https://youtu.be/qqz0VSaNxuw?t=968) -- [0:19:56 Haskell](https://youtu.be/qqz0VSaNxuw?t=1196) -- [0:21:23 Python](https://youtu.be/qqz0VSaNxuw?t=1283) -- [0:23:37 Java](https://youtu.be/qqz0VSaNxuw?t=1417) -- [0:25:45 Delphi](https://youtu.be/qqz0VSaNxuw?t=1545) -- [0:28:43 SQL](https://youtu.be/qqz0VSaNxuw?t=1723) -- [0:30:43 PHP 0:41:17 стрелочку из плюсов взяли](https://youtu.be/qqz0VSaNxuw?t=1843) -- [0:33:14 C#](https://youtu.be/qqz0VSaNxuw?t=1994) -- [0:35:20 Go](https://youtu.be/qqz0VSaNxuw?t=2120) -- [0:36:17 Rust](https://youtu.be/qqz0VSaNxuw?t=2177) -- [0:37:30 TypeScript](https://youtu.be/qqz0VSaNxuw?t=2250) -- [0:39:59 Swift](https://youtu.be/qqz0VSaNxuw?t=2399) -- [0:40:19 Kotlin](https://youtu.be/qqz0VSaNxuw?t=2419) -- [0:42:20 взаимовлияние языков](https://youtu.be/qqz0VSaNxuw?t=2540) -- [0:44:23 все ли языки используются сегодня](https://youtu.be/qqz0VSaNxuw?t=2663) -- [0:49:35 производительность языков](https://youtu.be/qqz0VSaNxuw?t=2975) -- [0:54:34 опциональная аннотация типов](https://youtu.be/qqz0VSaNxuw?t=3274) -- [0:56:50 прогревание кода](https://youtu.be/qqz0VSaNxuw?t=3410) -- [0:59:24 первые операционные системы](https://youtu.be/qqz0VSaNxuw?t=3564) -- [1:00:44 ограничение по вложенности рекурсии](https://youtu.be/qqz0VSaNxuw?t=3644) -- [1:02:53 абстрактное синтаксическое дерево](https://youtu.be/qqz0VSaNxuw?t=3773) -- [1:04:52 машинный код и байт-код](https://youtu.be/qqz0VSaNxuw?t=3892) -- [1:07:26 typescript быстрее javascript?](https://youtu.be/qqz0VSaNxuw?t=4046) -- [1:11:45 goroutine на Go асинхронная?](https://youtu.be/qqz0VSaNxuw?t=4305) -- [1:12:58 асинхронная функция в javascript](https://youtu.be/qqz0VSaNxuw?t=4378) -- [1:15:23 строгая типизация влияет на скорость?](https://youtu.be/qqz0VSaNxuw?t=4523) -- [1:16:13 выведение и проверка типов в IDE](https://youtu.be/qqz0VSaNxuw?t=4573) - -## [Парадигмы программирования (обзор)](https://youtu.be/Yk1sxLVHfjs) - -- [00:20 парадигма](https://youtu.be/Yk1sxLVHfjs?t=20) -- [02:19 императивная программа: пошаговое исполнение на примере JavaScript](https://youtu.be/Yk1sxLVHfjs?t=139) -- [03:22 пошаговое исполнение характерно для неструктурных ЯП: Assembly language, Basic](https://youtu.be/Yk1sxLVHfjs?t=202) -- [05:08 структурная программа на Rust](https://youtu.be/Yk1sxLVHfjs?t=308) -- [06:21 процедурный стиль на Python](https://youtu.be/Yk1sxLVHfjs?t=381) -- [07:28 объектно-ориентированное программирование на примере JavaScript](https://youtu.be/Yk1sxLVHfjs?t=448) -- [09:32 ООП хорош не для всякой задачи -- пример с пирожком](https://youtu.be/Yk1sxLVHfjs?t=572) -- [13:28 прототипное программирование](https://youtu.be/Yk1sxLVHfjs?t=808) -- [16:51 функциональное программирование](https://youtu.be/Yk1sxLVHfjs?t=1011) -- [18:58 асинхронное программирование](https://youtu.be/Yk1sxLVHfjs?t=1138) -- [22:48 реактивное программирование](https://youtu.be/Yk1sxLVHfjs?t=1368) -- [26:04 событийно-ориентированное программирование (управляется потоками событий)](https://youtu.be/Yk1sxLVHfjs?t=1564) -- [27:03 метапрограммирование](https://youtu.be/Yk1sxLVHfjs?t=1623) -- [28:58 мультипарадигменное программирование](https://youtu.be/Yk1sxLVHfjs?t=1738) -- [30:52 параллельное программирование](https://youtu.be/Yk1sxLVHfjs?t=1852) -- [31:58 реактивность](https://youtu.be/Yk1sxLVHfjs?t=1918) -- [33:29 функции 1 класса](https://youtu.be/Yk1sxLVHfjs?t=2009) -- [34:55 геттеры и сеттеры](https://youtu.be/Yk1sxLVHfjs?t=2095) -- [37:37 смешивание стилей](https://youtu.be/Yk1sxLVHfjs?t=2257) -- [38:07 если хочется писать в чистом ООП](https://youtu.be/Yk1sxLVHfjs?t=2287) -- [39:43 объект, класс, коллекция -- разница](https://youtu.be/Yk1sxLVHfjs?t=2383) -- [47:27 где хранятся классы](https://youtu.be/Yk1sxLVHfjs?t=2847) -- [47:54 у каждой парадигмы свои шаблоны программирования](https://youtu.be/Yk1sxLVHfjs?t=2874) -- [48:52 когда используется функциональное программирование](https://youtu.be/Yk1sxLVHfjs?t=2932) - -## [Примеси, обертки, декораторы, мемоизация](https://youtu.be/2h9syXN5wO0) - -- [00:00:00 Синхронная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=0) -- [00:02:55 Синхронная универсальная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=175) -- [00:08:28 Асинхронная универсальная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=508) -- [00:15:50 Синхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/2h9syXN5wO0?t=950) -- [00:22:45 Асинхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/2h9syXN5wO0?t=1365) -- [00:25:38 Функция-обертка, которая ограничивает вызов функции до одного вызова (once) ](https://youtu.be/2h9syXN5wO0?t=1538) -- [00:27:36 Функция-обертка, которая ограничивает вызов функции до n-го вызова (limit)](https://youtu.be/2h9syXN5wO0?t=1656) -- [00:29:50 Функция-обертка, которая отменяет вызов функции (cancel)](https://youtu.be/2h9syXN5wO0?t=1790) -- [00:32:29 Функция-обертка с методами timeout, limit, cancel](https://youtu.be/2h9syXN5wO0?t=1949) -- [00:39:03 Функция-обертка с методами timeout, limit, cancel (оптимизированная)](https://youtu.be/2h9syXN5wO0?t=2343) -- [00:42:28 Функция-обертка, которая ограничивает один вызов за 200 мс (throttle)](https://youtu.be/2h9syXN5wO0?t=2548) -- [00:45:47 Примесь поля через точку ](https://youtu.be/2h9syXN5wO0?t=2747) -- [00:51:35 Примесь поля через функцию extend](https://youtu.be/2h9syXN5wO0?t=3095) -- [00:57:35 Примесь поля через object.assign( )](https://youtu.be/2h9syXN5wO0?t=3455) -- [00:59:18 Примесь поведения ](https://youtu.be/2h9syXN5wO0?t=3558) -- [01:02:23 Примесь изменения класса](https://youtu.be/2h9syXN5wO0?t=3743) -- [01:06:50 Определение](https://youtu.be/2h9syXN5wO0?t=4010) -- [01:07:30 Реализация простой мемоизации ](https://youtu.be/2h9syXN5wO0?t=4050) -- [01:14:43 Реализация простой мемоизации с проверкой скорости ](https://youtu.be/2h9syXN5wO0?t=4483) -- [01:20:43 Удаление накопленного кэша ](https://youtu.be/2h9syXN5wO0?t=4843) -- [01:25:35 Асинхронная мемоизация ](https://youtu.be/2h9syXN5wO0?t=5135) -- [01:31:10 Преобразование аргументов и ключей в hash-функцию](https://youtu.be/2h9syXN5wO0?t=5470) -- [01:33:32 Реализация сложной мемоизации](https://youtu.be/2h9syXN5wO0?t=5612) - -## [Ответы на вопросы по курсу "Основы программирования" 2019-2020](https://youtu.be/TY6nDW7aYys) - -## [Антипаттерны процедурного программирования](https://youtu.be/cTv7V22mkwE) - -## [Семинар: выполнение лабораторных работ на JavaSript по курсу "Основы программирования"](https://youtu.be/ikUOyFPzdJw) - -## [Массивы в JavaScript (методы Array)](https://youtu.be/D1kfYBkX9FE) - -- [00:00 Конструкция массива](https://youtu.be/D1kfYBkX9FE?t=0) -- [09:58 Метод concat](https://youtu.be/D1kfYBkX9FE?t=598) -- [11:00 Методы every и some ](https://youtu.be/D1kfYBkX9FE?t=660) -- [13:00 Метод filter ](https://youtu.be/D1kfYBkX9FE?t=780) -- [13:29 Методы find и findIndex](https://youtu.be/D1kfYBkX9FE?t=809) -- [14:30 Метод flat ](https://youtu.be/D1kfYBkX9FE?t=870) -- [17:08 Метод includes ](https://youtu.be/D1kfYBkX9FE?t=1028) -- [17:32 Метод indexOf и lastIndexOf](https://youtu.be/D1kfYBkX9FE?t=1052) -- [18:35 Метод join](https://youtu.be/D1kfYBkX9FE?t=1115) -- [18:58 Метод reverse](https://youtu.be/D1kfYBkX9FE?t=1138) -- [19:29 Метод slice](https://youtu.be/D1kfYBkX9FE?t=1169) -- [21:49 Метод splice](https://youtu.be/D1kfYBkX9FE?t=1309) -- [23:27 Методы reduce и reduceRight](https://youtu.be/D1kfYBkX9FE?t=1407) - -## [Code Review: как это и зачем](https://youtu.be/EKL6NiIQ6ZU) - -## [Семинар: Code Review, ответы на вопросы](https://youtu.be/AgH4OAKbmkM) - -## [Мономорфный и полиморфный код, инлайн-кэш, скрытые классы в JavaScript](https://youtu.be/9JUY3prnCQ4) - -## [Ассоциация, агрегация и композиция объектов в JavaScript](https://youtu.be/tOIcBrzezK0) - -## [Рефакторинг: причины, цели, техники и процесс](https://youtu.be/z73wmpdweQ4) - -## [Принцип подстановки Барбары Лисков](https://youtu.be/RbhYxygxroc) - -## [Композиция функций (pipe, compose) в JavaScript](https://youtu.be/xS9FicVrOTI) - -## [Примеси в JavaScript: mixin, extend, Object.assign, class λ-mixin](https://youtu.be/NZMrJ2adEyY) - -## [Прототипное программирование и прототипное наследование в JavaScript](https://youtu.be/SzaXTW2qcJE) - -## [Мемоизация функций: memoize в JavaScript](https://youtu.be/H6S8QJo2Qxg) - -## [Функции-обертки: Wrappers в JavaScript](https://youtu.be/En7pWi2fSzs) - -## [Новое в JavaScript: ES.Next, ECMAScript 2020, ES11, ES10, ES9, ES8, ES7, ES6, ES2020, ES2019](https://youtu.be/fUjHLj8bq_Y) - -- [00:00 ECMA Script versions](https://youtu.be/fUjHLj8bq_Y?t=0) -- [09:40 Array.proptotype.includes ](https://youtu.be/fUjHLj8bq_Y?t=580) -- [10:55 Array.proptotype.flat ](https://youtu.be/fUjHLj8bq_Y?t=655) -- [11:36 Array.proptotype.flatMap](https://youtu.be/fUjHLj8bq_Y?t=696) -- [12:20 Array.proptotype.sort](https://youtu.be/fUjHLj8bq_Y?t=740) -- [14:24 Object.values ](https://youtu.be/fUjHLj8bq_Y?t=864) -- [15:06 Object.keys ](https://youtu.be/fUjHLj8bq_Y?t=906) -- [15:15 Object.entries ](https://youtu.be/fUjHLj8bq_Y?t=915) -- [15:49 Object.fromEntries ](https://youtu.be/fUjHLj8bq_Y?t=949) -- [16:36 String.proptotype.padStart / String.proptotype.padEnd ](https://youtu.be/fUjHLj8bq_Y?t=996) -- [17:02 String.proptotype.trimStart / String.proptotype.trimEnd](https://youtu.be/fUjHLj8bq_Y?t=1022) -- [17:18 Operator rest ](https://youtu.be/fUjHLj8bq_Y?t=1038) -- [19:38 Operator spread](https://youtu.be/fUjHLj8bq_Y?t=1178) -- [21:34 Operator exponentiation x ** y](https://youtu.be/fUjHLj8bq_Y?t=1294) -- [22:35 Operator optional chaining ?.](https://youtu.be/fUjHLj8bq_Y?t=1355) -- [24:22 Asynchronous function: async / await ](https://youtu.be/fUjHLj8bq_Y?t=1462) -- [26:34 Trailing Commas ](https://youtu.be/fUjHLj8bq_Y?t=1594) -- [28:00 Asynchronous iterable contract: for-await](https://youtu.be/fUjHLj8bq_Y?t=1680) -- [29:51 Try...catch ](https://youtu.be/fUjHLj8bq_Y?t=1791) -- [30:21 Function.prototype.toString ](https://youtu.be/fUjHLj8bq_Y?t=1821) -- [30:58 Symbol.prototype.description ](https://youtu.be/fUjHLj8bq_Y?t=1858) -- [32:11 Promise.finaly ](https://youtu.be/fUjHLj8bq_Y?t=1931) -- [33:22 Promise.allSettled ](https://youtu.be/fUjHLj8bq_Y?t=2002) -- [36:18 More features](https://youtu.be/fUjHLj8bq_Y?t=2178) - -## [Вступительная лекция по инженерии программного обеспечения (КПИ 1 курс) 2021-09-01](https://youtu.be/vWi6KyG078g) - -## [Автоматное программирование c примерами на JavaScript](https://youtu.be/mxz7_zcip0c) - -## [Контрактное программирование с примерами на JavaScript и Node.js](https://youtu.be/K5_kSUvbGEQ) - -## [JavaScript - Практические задачи #1: Пример исправления, лайвкодинг, оптимизация и рефакторинг](https://youtu.be/CRmjViLEE9E) - -## [JavaScript и Node.js: Добавь в Github личную карту знаний](https://youtu.be/gDUGZsw2N2g) From 6faae4f4789731873cb7aaf7696f285e877387d4 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 4 Aug 2022 15:11:59 +0300 Subject: [PATCH 008/217] Move timecodes for Async prog to separate file --- Courses/Asynchronous-timecodes.md | 122 ++++++++++++++++++++++++++++++ Courses/Asynchronous.md | 122 ------------------------------ 2 files changed, 122 insertions(+), 122 deletions(-) create mode 100644 Courses/Asynchronous-timecodes.md diff --git a/Courses/Asynchronous-timecodes.md b/Courses/Asynchronous-timecodes.md new file mode 100644 index 0000000..56a7d63 --- /dev/null +++ b/Courses/Asynchronous-timecodes.md @@ -0,0 +1,122 @@ +# Таймкоды к курсу "Асинхронное программирование" + +Общее оглавление курса тут: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md + +## [Асинхронное программирование в Node.js и JavaScript](https://youtu.be/hY6Z6qNYzmc) + +- [5:45 Callbacks](https://youtu.be/hY6Z6qNYzmc?t=345) +- [10:00 Async.js or analogues](https://youtu.be/hY6Z6qNYzmc?t=600) +- [15:47 Events](https://youtu.be/hY6Z6qNYzmc?t=947) +- [18:00 Promise](https://youtu.be/hY6Z6qNYzmc?t=1080) +- [25:20 async/await](https://youtu.be/hY6Z6qNYzmc?t=1520) +- [27:10 Functor + Chaining + composition](https://youtu.be/hY6Z6qNYzmc?t=1630) +- [30:49 Problems of callback, async.js, Proimise, async/await](https://youtu.be/hY6Z6qNYzmc?t=1849) +- [34:00 Add timeout to any function](https://youtu.be/hY6Z6qNYzmc?t=2040) +- [36:55 Make function cancelable](https://youtu.be/hY6Z6qNYzmc?t=2215) +- [37:59 More wrappers](https://youtu.be/hY6Z6qNYzmc?t=2279) +- [39:22 Promisify and Callbackify](https://youtu.be/hY6Z6qNYzmc?t=2362) +- [48:47 Sync function to async](https://youtu.be/hY6Z6qNYzmc?t=2927) +- [41:43 Sync function to Promise](https://youtu.be/hY6Z6qNYzmc?t=2503) +- [43:17 Convertors](https://youtu.be/hY6Z6qNYzmc?t=2597) +- [43:31 Metasync](https://youtu.be/hY6Z6qNYzmc?t=2611) +- [45:26 Function composition](https://youtu.be/hY6Z6qNYzmc?t=2726) +- [47:09 Asynchronous function composition](https://youtu.be/hY6Z6qNYzmc?t=2829) +- [47:58 Flow communication like in electronics](https://youtu.be/hY6Z6qNYzmc?t=2878) +- [50:06 Collectors](https://youtu.be/hY6Z6qNYzmc?t=3006) +- [59:17 Queue](https://youtu.be/hY6Z6qNYzmc?t=3557) + +## [Таймеры, таймауты, EventEmitter в JavaScript и Node.js](https://youtu.be/LK2jveAnRNg) + +- [0:30 callback sync/async](https://youtu.be/LK2jveAnRNg?t=30) +- [1:35 временная задержка sleep.js](https://youtu.be/LK2jveAnRNg?t=95) +- [5:35 await-sleep.js](https://youtu.be/LK2jveAnRNg?t=335) +- [8:40 sleep-then.js](https://youtu.be/LK2jveAnRNg?t=520) +- [9:30 order.js](https://youtu.be/LK2jveAnRNg?t=570) +- [18:38 precision.js](https://youtu.be/LK2jveAnRNg?t=1118) +- [22:13 blocking.js](https://youtu.be/LK2jveAnRNg?t=1333) +- [22:50 timers.js](https://youtu.be/LK2jveAnRNg?t=1370) +- [29:35 ref-unref.js](https://youtu.be/LK2jveAnRNg?t=1775) +- [32:05 enroll.js](https://youtu.be/LK2jveAnRNg?t=1925) +- [34:57 eventloop.txt](https://youtu.be/LK2jveAnRNg?t=2097) +- [37:37 eventEmitter](https://youtu.be/LK2jveAnRNg?t=2257) +- [44:32 simple.js](https://youtu.be/LK2jveAnRNg?t=2672) +- [47:48 usage.js](https://youtu.be/LK2jveAnRNg?t=2868) +- [48:30 enhanced.js](https://youtu.be/LK2jveAnRNg?t=2910) +- [50:18 star-fix.js](https://youtu.be/LK2jveAnRNg?t=3018) +- [51:10 usage.js](https://youtu.be/LK2jveAnRNg?t=3070) +- [53:15 closure.js](https://youtu.be/LK2jveAnRNg?t=3195) +- [54:50 fp.js](https://youtu.be/LK2jveAnRNg?t=3290) +- [57:10 methods.js](https://youtu.be/LK2jveAnRNg?t=3430) +- [1:06:35 min.js](https://youtu.be/LK2jveAnRNg?t=3995) +- [1:12:31 prod.js](https://youtu.be/LK2jveAnRNg?t=4351) + +## [Асинхронное программирование на callback`ах в JavaScript](https://youtu.be/z8Hg6zgi3yQ) + +- [1:20 пример callback функции](https://youtu.be/z8Hg6zgi3yQ?t=80) +- [2:40 пример последовательного исполнения callback функций](https://youtu.be/z8Hg6zgi3yQ?t=160) +- [5:52 пример параллельного исполнения async функций c использованием wrapAsync](https://youtu.be/z8Hg6zgi3yQ?t=352) +- [15:18 пример последовательного исполнения async функций c использованием wrapAsync](https://youtu.be/z8Hg6zgi3yQ?t=918) +- [19:05 chain исполнение async функций](https://youtu.be/z8Hg6zgi3yQ?t=1145) +- [41:16 где можно встретить асинхронные функции](https://youtu.be/z8Hg6zgi3yQ?t=2476) + +## [Неблокирующее асинхронное итерирование в JavaScript](https://youtu.be/wYA2cIRYLoA) + +- [1:02 блокирующее итерирование по массиву](https://youtu.be/wYA2cIRYLoA?t=62) +- [3:24 блокирующее итерирование с помощью for await](https://youtu.be/wYA2cIRYLoA?t=204) +- [4:47 неблокирующее итерирование с помощью setTimeout](https://youtu.be/wYA2cIRYLoA?t=287) +- [6:45 неблокирующее итерирование с помощью for await](https://youtu.be/wYA2cIRYLoA?t=405) +- [8:20 неблокирующее итерирование без задержки](https://youtu.be/wYA2cIRYLoA?t=500) +- [13:00 неблокирующее итерирование без задержки с помощью for await](https://youtu.be/wYA2cIRYLoA?t=780) +- [19:30 использование асинхронного итерирования для обычных массивов](https://youtu.be/wYA2cIRYLoA?t=1170) + +## [Асинхронность с библиотекой async.js](https://youtu.be/XQ94wQc-erU) + +## [Асинхронность на промисах, Promise, all, then, catch, race](https://youtu.be/RMl4r6s1Y8M) + +## [Асинхронные функции, async/await, thenable, обработка ошибок](https://youtu.be/Jdf_tZuJbHI) + +## [Асинхронные адаптеры: promisify, callbackify, asyncify...](https://youtu.be/76k6_YkYRmU) + +## [Асинхронные коллекторы данных](https://youtu.be/tgodt1JL6II) + +## [Необработанные ошибки в промисах на Node.js](https://youtu.be/1Ml5NE2fsZ8) + +## [Проблема асинхронного стектрейса в JavaScript и Node.js](https://youtu.be/pfiHTx3j87Y) + +## [Генераторы и асинхронные генераторы в JavaScript](https://youtu.be/kvNm9D32s8s) + +- [00:00 Способы объявления генераторов ](https://youtu.be/kvNm9D32s8s?t=0) +- [10:41 Пример генератора с yield ](https://youtu.be/kvNm9D32s8s?t=641) +- [15:54 Пример генератора с yield и return ](https://youtu.be/kvNm9D32s8s?t=954) +- [18:47 Получение значений из генератора циклом for...of ](https://youtu.be/kvNm9D32s8s?t=1127) +- [21:04 Получение значений из генератора spead - оператором ](https://youtu.be/kvNm9D32s8s?t=1264) +- [21:50 Метод next ](https://youtu.be/kvNm9D32s8s?t=1310) +- [23:30 Пример генератора с yield * возвращающего итерируемые объекты ](https://youtu.be/kvNm9D32s8s?t=1410) +- [25:05 Пример генератора с yield * возвращающего другие генераторы ](https://youtu.be/kvNm9D32s8s?t=1505) +- [26:18 Метод return ](https://youtu.be/kvNm9D32s8s?t=1578) +- [28:11 Метод throw](https://youtu.be/kvNm9D32s8s?t=1691) +- [29:05 Обобщение](https://youtu.be/kvNm9D32s8s?t=1745) + +## [Итераторы и асинхронные итераторы в JavaScript](https://youtu.be/rBGFlWpVpGs) + +## [Отмена асинхронных операций, cancellable callback and Promise в JavaScript](https://youtu.be/T8fXlnqI4Ws) + +## [Асинхронная композиция функций на JavaScript](https://youtu.be/3ZCrMlMpOrM) + +## [Thenable и легковесный await в JavaScript](https://youtu.be/DXp__1VNIvI) + +## [Конкурентная асинхронная очередь на JavaScript](https://youtu.be/Lg46AH8wFvg) + +## [Паттерн Revealing Constructor - открытый конструктор](https://youtu.be/leR5sXRkuJI) + +## [Future: Асинхронность на фьючерах без состояния](https://youtu.be/22ONv3AGXdk) + +## [Deferred: Асинхронность на диферах с состоянием](https://youtu.be/a2fVA1o-ovM) + +## [Модель акторов для параллельных вычислений](https://youtu.be/xp5MVKEqxY4) + +## [Паттерн Наблюдатель (Observer + Observable)](https://youtu.be/_bFXuLcXoXg) + +## [Асинхронность на RxJS и потоки событий](https://youtu.be/0kcpMAl-wfE) + +## [Асинхронный пул для worker thread pool в Node.js](https://youtu.be/Jj5KZRq4wYI) diff --git a/Courses/Asynchronous.md b/Courses/Asynchronous.md index 951b3d8..29268ff 100644 --- a/Courses/Asynchronous.md +++ b/Courses/Asynchronous.md @@ -60,125 +60,3 @@ - Async hooks - [Разделяемая память в многопоточном Node.js](https://youtu.be/KNsm_iIQt7U) - [Асинхронный пул для worker thread pool в Node.js](https://youtu.be/Jj5KZRq4wYI) - -# Асинхронное программирование (таймкоды) - -## [Асинхронное программирование в Node.js и JavaScript](https://youtu.be/hY6Z6qNYzmc) - -- [5:45 Callbacks](https://youtu.be/hY6Z6qNYzmc?t=345) -- [10:00 Async.js or analogues](https://youtu.be/hY6Z6qNYzmc?t=600) -- [15:47 Events](https://youtu.be/hY6Z6qNYzmc?t=947) -- [18:00 Promise](https://youtu.be/hY6Z6qNYzmc?t=1080) -- [25:20 async/await](https://youtu.be/hY6Z6qNYzmc?t=1520) -- [27:10 Functor + Chaining + composition](https://youtu.be/hY6Z6qNYzmc?t=1630) -- [30:49 Problems of callback, async.js, Proimise, async/await](https://youtu.be/hY6Z6qNYzmc?t=1849) -- [34:00 Add timeout to any function](https://youtu.be/hY6Z6qNYzmc?t=2040) -- [36:55 Make function cancelable](https://youtu.be/hY6Z6qNYzmc?t=2215) -- [37:59 More wrappers](https://youtu.be/hY6Z6qNYzmc?t=2279) -- [39:22 Promisify and Callbackify](https://youtu.be/hY6Z6qNYzmc?t=2362) -- [48:47 Sync function to async](https://youtu.be/hY6Z6qNYzmc?t=2927) -- [41:43 Sync function to Promise](https://youtu.be/hY6Z6qNYzmc?t=2503) -- [43:17 Convertors](https://youtu.be/hY6Z6qNYzmc?t=2597) -- [43:31 Metasync](https://youtu.be/hY6Z6qNYzmc?t=2611) -- [45:26 Function composition](https://youtu.be/hY6Z6qNYzmc?t=2726) -- [47:09 Asynchronous function composition](https://youtu.be/hY6Z6qNYzmc?t=2829) -- [47:58 Flow communication like in electronics](https://youtu.be/hY6Z6qNYzmc?t=2878) -- [50:06 Collectors](https://youtu.be/hY6Z6qNYzmc?t=3006) -- [59:17 Queue](https://youtu.be/hY6Z6qNYzmc?t=3557) - -## [Таймеры, таймауты, EventEmitter в JavaScript и Node.js](https://youtu.be/LK2jveAnRNg) - -- [0:30 callback sync/async](https://youtu.be/LK2jveAnRNg?t=30) -- [1:35 временная задержка sleep.js](https://youtu.be/LK2jveAnRNg?t=95) -- [5:35 await-sleep.js](https://youtu.be/LK2jveAnRNg?t=335) -- [8:40 sleep-then.js](https://youtu.be/LK2jveAnRNg?t=520) -- [9:30 order.js](https://youtu.be/LK2jveAnRNg?t=570) -- [18:38 precision.js](https://youtu.be/LK2jveAnRNg?t=1118) -- [22:13 blocking.js](https://youtu.be/LK2jveAnRNg?t=1333) -- [22:50 timers.js](https://youtu.be/LK2jveAnRNg?t=1370) -- [29:35 ref-unref.js](https://youtu.be/LK2jveAnRNg?t=1775) -- [32:05 enroll.js](https://youtu.be/LK2jveAnRNg?t=1925) -- [34:57 eventloop.txt](https://youtu.be/LK2jveAnRNg?t=2097) -- [37:37 eventEmitter](https://youtu.be/LK2jveAnRNg?t=2257) -- [44:32 simple.js](https://youtu.be/LK2jveAnRNg?t=2672) -- [47:48 usage.js](https://youtu.be/LK2jveAnRNg?t=2868) -- [48:30 enhanced.js](https://youtu.be/LK2jveAnRNg?t=2910) -- [50:18 star-fix.js](https://youtu.be/LK2jveAnRNg?t=3018) -- [51:10 usage.js](https://youtu.be/LK2jveAnRNg?t=3070) -- [53:15 closure.js](https://youtu.be/LK2jveAnRNg?t=3195) -- [54:50 fp.js](https://youtu.be/LK2jveAnRNg?t=3290) -- [57:10 methods.js](https://youtu.be/LK2jveAnRNg?t=3430) -- [1:06:35 min.js](https://youtu.be/LK2jveAnRNg?t=3995) -- [1:12:31 prod.js](https://youtu.be/LK2jveAnRNg?t=4351) - -## [Асинхронное программирование на callback`ах в JavaScript](https://youtu.be/z8Hg6zgi3yQ) - -- [1:20 пример callback функции](https://youtu.be/z8Hg6zgi3yQ?t=80) -- [2:40 пример последовательного исполнения callback функций](https://youtu.be/z8Hg6zgi3yQ?t=160) -- [5:52 пример параллельного исполнения async функций c использованием wrapAsync](https://youtu.be/z8Hg6zgi3yQ?t=352) -- [15:18 пример последовательного исполнения async функций c использованием wrapAsync](https://youtu.be/z8Hg6zgi3yQ?t=918) -- [19:05 chain исполнение async функций](https://youtu.be/z8Hg6zgi3yQ?t=1145) -- [41:16 где можно встретить асинхронные функции](https://youtu.be/z8Hg6zgi3yQ?t=2476) - -## [Неблокирующее асинхронное итерирование в JavaScript](https://youtu.be/wYA2cIRYLoA) - -- [1:02 блокирующее итерирование по массиву](https://youtu.be/wYA2cIRYLoA?t=62) -- [3:24 блокирующее итерирование с помощью for await](https://youtu.be/wYA2cIRYLoA?t=204) -- [4:47 неблокирующее итерирование с помощью setTimeout](https://youtu.be/wYA2cIRYLoA?t=287) -- [6:45 неблокирующее итерирование с помощью for await](https://youtu.be/wYA2cIRYLoA?t=405) -- [8:20 неблокирующее итерирование без задержки](https://youtu.be/wYA2cIRYLoA?t=500) -- [13:00 неблокирующее итерирование без задержки с помощью for await](https://youtu.be/wYA2cIRYLoA?t=780) -- [19:30 использование асинхронного итерирования для обычных массивов](https://youtu.be/wYA2cIRYLoA?t=1170) - -## [Асинхронность с библиотекой async.js](https://youtu.be/XQ94wQc-erU) - -## [Асинхронность на промисах, Promise, all, then, catch, race](https://youtu.be/RMl4r6s1Y8M) - -## [Асинхронные функции, async/await, thenable, обработка ошибок](https://youtu.be/Jdf_tZuJbHI) - -## [Асинхронные адаптеры: promisify, callbackify, asyncify...](https://youtu.be/76k6_YkYRmU) - -## [Асинхронные коллекторы данных](https://youtu.be/tgodt1JL6II) - -## [Необработанные ошибки в промисах на Node.js](https://youtu.be/1Ml5NE2fsZ8) - -## [Проблема асинхронного стектрейса в JavaScript и Node.js](https://youtu.be/pfiHTx3j87Y) - -## [Генераторы и асинхронные генераторы в JavaScript](https://youtu.be/kvNm9D32s8s) - -- [00:00 Способы объявления генераторов ](https://youtu.be/kvNm9D32s8s?t=0) -- [10:41 Пример генератора с yield ](https://youtu.be/kvNm9D32s8s?t=641) -- [15:54 Пример генератора с yield и return ](https://youtu.be/kvNm9D32s8s?t=954) -- [18:47 Получение значений из генератора циклом for...of ](https://youtu.be/kvNm9D32s8s?t=1127) -- [21:04 Получение значений из генератора spead - оператором ](https://youtu.be/kvNm9D32s8s?t=1264) -- [21:50 Метод next ](https://youtu.be/kvNm9D32s8s?t=1310) -- [23:30 Пример генератора с yield * возвращающего итерируемые объекты ](https://youtu.be/kvNm9D32s8s?t=1410) -- [25:05 Пример генератора с yield * возвращающего другие генераторы ](https://youtu.be/kvNm9D32s8s?t=1505) -- [26:18 Метод return ](https://youtu.be/kvNm9D32s8s?t=1578) -- [28:11 Метод throw](https://youtu.be/kvNm9D32s8s?t=1691) -- [29:05 Обобщение](https://youtu.be/kvNm9D32s8s?t=1745) - -## [Итераторы и асинхронные итераторы в JavaScript](https://youtu.be/rBGFlWpVpGs) - -## [Отмена асинхронных операций, cancellable callback and Promise в JavaScript](https://youtu.be/T8fXlnqI4Ws) - -## [Асинхронная композиция функций на JavaScript](https://youtu.be/3ZCrMlMpOrM) - -## [Thenable и легковесный await в JavaScript](https://youtu.be/DXp__1VNIvI) - -## [Конкурентная асинхронная очередь на JavaScript](https://youtu.be/Lg46AH8wFvg) - -## [Паттерн Revealing Constructor - открытый конструктор](https://youtu.be/leR5sXRkuJI) - -## [Future: Асинхронность на фьючерах без состояния](https://youtu.be/22ONv3AGXdk) - -## [Deferred: Асинхронность на диферах с состоянием](https://youtu.be/a2fVA1o-ovM) - -## [Модель акторов для параллельных вычислений](https://youtu.be/xp5MVKEqxY4) - -## [Паттерн Наблюдатель (Observer + Observable)](https://youtu.be/_bFXuLcXoXg) - -## [Асинхронность на RxJS и потоки событий](https://youtu.be/0kcpMAl-wfE) - -## [Асинхронный пул для worker thread pool в Node.js](https://youtu.be/Jj5KZRq4wYI) - From 9b8cb2fa575e80c7857d7eb5d60a3ce50e5ca2cc Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 4 Aug 2022 15:13:57 +0300 Subject: [PATCH 009/217] Move timecodes for Functional prog to separate file --- Courses/Functional-timecodes.md | 165 ++++++++++++++++++++++++++++++++ Courses/Functional.md | 165 -------------------------------- 2 files changed, 165 insertions(+), 165 deletions(-) create mode 100644 Courses/Functional-timecodes.md diff --git a/Courses/Functional-timecodes.md b/Courses/Functional-timecodes.md new file mode 100644 index 0000000..8ca0e61 --- /dev/null +++ b/Courses/Functional-timecodes.md @@ -0,0 +1,165 @@ +# Таймкоды к курсу "Функциональное программирование" + +Общее оглавление курса тут: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Functional.md + +## [Функции, лямбды (стрелочные функции), контексты, замыкания в JavaScript](https://youtu.be/pn5myCmpV2U) + +- [00:00:00 Введение ](https://youtu.be/pn5myCmpV2U?t=0) +- [00:11:22 Функция объявление (Declaration)](https://youtu.be/pn5myCmpV2U?t=682) +- [00:12:46 Функция выражение (Expression)](https://youtu.be/pn5myCmpV2U?t=766) +- [00:16:07 Лямбда-выражение (Lambda expression) или функция-стрелка (Arrow function) ](https://youtu.be/pn5myCmpV2U?t=967) +- [00:16:43 Лямбда-функция (Lambda function) ](https://youtu.be/pn5myCmpV2U?t=1003) +- [00:18:45 Область видимости (Scope)](https://youtu.be/pn5myCmpV2U?t=1125) +- [00:25:00 Функции, как абстракции](https://youtu.be/pn5myCmpV2U?t=1500) +- [00:26:43 Методы функции (name, length, toString( ) )](https://youtu.be/pn5myCmpV2U?t=1603) +- [00:31:26 Значения по умолчанию у функции ](https://youtu.be/pn5myCmpV2U?t=1886) +- [00:36:46 Rest-оператор (...args)](https://youtu.be/pn5myCmpV2U?t=2206) +- [00:41:49 Способ определения функции, через new Function](https://youtu.be/pn5myCmpV2U?t=2509) +- [00:44:46 Функции внутри объекта](https://youtu.be/pn5myCmpV2U?t=2686) +- [00:50:42 Обращение к полям объекта из привязанной функции, через this](https://youtu.be/pn5myCmpV2U?t=3042) +- [00:55:24 История синтаксиса создания контекстов, через самовызывающиеся функции ( IIFE)](https://youtu.be/pn5myCmpV2U?t=3324) +- [00:58:30 Методы функции, наследуемой от объекта (call, apply)](https://youtu.be/pn5myCmpV2U?t=3510) +- [01:00:53 Комментирование функций](https://youtu.be/pn5myCmpV2U?t=3653) +- [01:01:27 Задание декомпозиции функции](https://youtu.be/pn5myCmpV2U?t=3687) +- [01:04:24 Замыкание: context ](https://youtu.be/pn5myCmpV2U?t=3864) +- [01:08:41 Замыкание: chainning ](https://youtu.be/pn5myCmpV2U?t=4121) +- [01:11:55 Замыкание: summator ](https://youtu.be/pn5myCmpV2U?t=4315) +- [01:14:16 Замыкание: recursion](https://youtu.be/pn5myCmpV2U?t=4456) + +## [Частичное применение и каррирование в JavaScript ( Partial application )](https://youtu.be/ND8KQ5xjk7o) + +- [00:00:00 Замыкание ](https://youtu.be/ND8KQ5xjk7o?t=0) +- [00:04:54 Лямбда- функция ](https://youtu.be/ND8KQ5xjk7o?t=294) +- [00:06:06 Метод bind ](https://youtu.be/ND8KQ5xjk7o?t=366) +- [00:08:30 Абстрагированный пример функции ](https://youtu.be/ND8KQ5xjk7o?t=510) +- [00:13:42 Абстрагированный пример функции (расширение) ](https://youtu.be/ND8KQ5xjk7o?t=822) +- [00:15:47 Неправильная реализация каррирования ](https://youtu.be/ND8KQ5xjk7o?t=947) +- [00:22:22 Правильная реализация каррирования ](https://youtu.be/ND8KQ5xjk7o?t=1342) +- [00:28:54 Правильная реализация каррирования (расширение)](https://youtu.be/ND8KQ5xjk7o?t=1734) +- [00:31:41 Функциональные абстракции (superposition)](https://youtu.be/ND8KQ5xjk7o?t=1901) +- [00:38:02 Функциональные абстракции, с сохранением выражений (composition)](https://youtu.be/ND8KQ5xjk7o?t=2282) +- [00:45:05 Композиция с 2 функциями](https://youtu.be/ND8KQ5xjk7o?t=2705) +- [00:46:05 Композиция с n - функциями, при помощи метода reduce](https://youtu.be/ND8KQ5xjk7o?t=2765) +- [00:51:25 Композиция с n - функциями, при помощи цикла ](https://youtu.be/ND8KQ5xjk7o?t=3085) +- [00:54:29 Композиция с n - функциями, при помощи рекурсии](https://youtu.be/ND8KQ5xjk7o?t=3269) +- [00:57:40 Композиция асинхронных функций ](https://youtu.be/ND8KQ5xjk7o?t=3460) +- [01:01:27 Обобщение](https://youtu.be/ND8KQ5xjk7o?t=3687) + +## [Функции высшего порядка, колбеки, события на JavaScript (HigherOrderFunctions, callbacks, events)](https://youtu.be/1vqATwbGHnc) + +- [00:00:00 Определение ](https://youtu.be/1vqATwbGHnc?t=0) +- [00:02:03 Математическая функция ](https://youtu.be/1vqATwbGHnc?t=123) +- [00:05:57 Функция обратного вызова (callback) ](https://youtu.be/1vqATwbGHnc?t=357) +- [00:09:33 Замыкание ](https://youtu.be/1vqATwbGHnc?t=573) +- [00:10:51 Цепочка вызовов ](https://youtu.be/1vqATwbGHnc?t=651) +- [00:12:40 Сохранение кэша с помощью замыкания](https://youtu.be/1vqATwbGHnc?t=760) +- [00:18:29 Добавление функции поведение логирования](https://youtu.be/1vqATwbGHnc?t=1109) +- [00:21:45 Обобщение ](https://youtu.be/1vqATwbGHnc?t=1305) +- [00:22:45 Сallback](https://youtu.be/1vqATwbGHnc?t=1365) +- [00:25:32 Сallback асинхронной функции считывание файла](https://youtu.be/1vqATwbGHnc?t=1532) +- [00:28:36 Сallback именованный](https://youtu.be/1vqATwbGHnc?t=1716) +- [00:33:01 Сallback-timer ](https://youtu.be/1vqATwbGHnc?t=1981) +- [00:36:20 Сallback-timer-curry](https://youtu.be/1vqATwbGHnc?t=2180) +- [00:38:59 Listener](https://youtu.be/1vqATwbGHnc?t=2339) +- [00:41:10 Listener-timer](https://youtu.be/1vqATwbGHnc?t=2470) +- [00:46:59 Event](https://youtu.be/1vqATwbGHnc?t=2819) +- [00:53:45 Event-imitter ](https://youtu.be/1vqATwbGHnc?t=3225) +- [00:57:48 Deferred object (отложенный объект)](https://youtu.be/1vqATwbGHnc?t=3468) +- [01:01:31 Errors](https://youtu.be/1vqATwbGHnc?t=3691) + +## [Примеси, обертки, декораторы, мемоизация в JavaScript (Wrappers)](https://youtu.be/oRQ0kQr1N-U) + +- [00:00:00 Синхронная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=0) +- [00:02:55 Синхронная универсальная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=175) +- [00:08:28 Асинхронная универсальная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=508) +- [00:15:50 Синхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/oRQ0kQr1N-U?t=950) +- [00:22:45 Асинхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/oRQ0kQr1N-U?t=1365) +- [00:25:38 Функция-обертка, которая ограничивает вызов функции до одного вызова (once) ](https://youtu.be/oRQ0kQr1N-U?t=1538) +- [00:27:36 Функция-обертка, которая ограничивает вызов функции до n-го вызова (limit)](https://youtu.be/oRQ0kQr1N-U?t=1656) +- [00:29:50 Функция-обертка, которая отменяет вызов функции (cancel)](https://youtu.be/oRQ0kQr1N-U?t=1790) +- [00:32:29 Функция-обертка с методами timeout, limit, cancel](https://youtu.be/oRQ0kQr1N-U?t=1949) +- [00:39:03 Функция-обертка с методами timeout, limit, cancel (оптимизированная)](https://youtu.be/oRQ0kQr1N-U?t=2343) +- [00:42:28 Функция-обертка, которая ограничивает один вызов за 200 мс (throttle)](https://youtu.be/oRQ0kQr1N-U?t=2548) +- [00:45:47 Примесь поля через точку ](https://youtu.be/oRQ0kQr1N-U?t=2747) +- [00:51:35 Примесь поля через функцию extend](https://youtu.be/oRQ0kQr1N-U?t=3095) +- [00:57:35 Примесь поля через object.assign( )](https://youtu.be/oRQ0kQr1N-U?t=3455) +- [00:59:18 Примесь поведения ](https://youtu.be/oRQ0kQr1N-U?t=3558) +- [01:02:23 Примесь изменения класса](https://youtu.be/oRQ0kQr1N-U?t=3743) +- [01:06:50 Определение](https://youtu.be/oRQ0kQr1N-U?t=4010) +- [01:07:30 Реализация простой мемоизации ](https://youtu.be/oRQ0kQr1N-U?t=4050) +- [01:14:43 Реализация простой мемоизации с проверкой скорости ](https://youtu.be/oRQ0kQr1N-U?t=4483) +- [01:20:43 Удаление накопленного кэша ](https://youtu.be/oRQ0kQr1N-U?t=4843) +- [01:25:35 Асинхронная мемоизация ](https://youtu.be/oRQ0kQr1N-U?t=5135) +- [01:31:10 Преобразование аргументов и ключей в hash-функцию](https://youtu.be/oRQ0kQr1N-U?t=5470) +- [01:33:32 Реализация сложной мемоизации](https://youtu.be/oRQ0kQr1N-U?t=5612) + +## [Чеининг функций и объектов, обработка ошибок в JavaScript](https://youtu.be/PfuEfIiLX34) + +- [00:00:00 Введение ](https://youtu.be/PfuEfIiLX34?t=0) +- [00:01:10 Чеининг через синтаксис вызова функций ](https://youtu.be/PfuEfIiLX34?t=70) +- [00:02:12 Prototype ](https://youtu.be/PfuEfIiLX34?t=132) +- [00:05:45 Сlass](https://youtu.be/PfuEfIiLX34?t=345) +- [00:06:11 Functor](https://youtu.be/PfuEfIiLX34?t=371) +- [00:11:54 Mutable](https://youtu.be/PfuEfIiLX34?t=714) +- [00:16:34 Iterator](https://youtu.be/PfuEfIiLX34?t=994) +- [00:26:18 Promise ](https://youtu.be/PfuEfIiLX34?t=1578) +- [00:26:35 Test](https://youtu.be/PfuEfIiLX34?t=1595) +- [00:37:08 Compare ](https://youtu.be/PfuEfIiLX34?t=2228) +- [00:39:45 Benchmark](https://youtu.be/PfuEfIiLX34?t=2385) +- [00:40:48 Запуск и анализ тестов ](https://youtu.be/PfuEfIiLX34?t=2448) +- [01:03:48 Первый способ возвращение ошибок в синхронном коде ](https://youtu.be/PfuEfIiLX34?t=3828) +- [01:09:24 Второй способ возвращение ошибок в синхронном коде ](https://youtu.be/PfuEfIiLX34?t=4164) +- [01:12:26 Возвращение ошибок в асинхронном коде ](https://youtu.be/PfuEfIiLX34?t=4346) +- [01:16:14 Корректное возвращение ошибок ](https://youtu.be/PfuEfIiLX34?t=4574) +- [01:20:03 Обработка ошибок c promise ](https://youtu.be/PfuEfIiLX34?t=4803) +- [01:23:58 Обработка ошибок c async-await](https://youtu.be/PfuEfIiLX34?t=5038) + +## [Функциональное программирование на JavaScript](https://youtu.be/0JxSs_GcvbQ) + +## [Функциональные объекты, функторы и монады в JavaScript](https://youtu.be/3Z7f0Gi8pxw) + +- [00:00:00 Определение функтора ](https://youtu.be/3Z7f0Gi8pxw?t=0) +- [00:01:40 Функтор из прототипа ](https://youtu.be/3Z7f0Gi8pxw?t=100) +- [00:08:17 Функтор из прототипа (упрощенный) ](https://youtu.be/3Z7f0Gi8pxw?t=497) +- [00:09:14 Функтор из замыкания ](https://youtu.be/3Z7f0Gi8pxw?t=554) +- [00:11:49 Функтор из замыкания с тернарным оператором](https://youtu.be/3Z7f0Gi8pxw?t=709) +- [00:12:44 Аппликативный функтор из прототипа ](https://youtu.be/3Z7f0Gi8pxw?t=764) +- [00:18:08 Аппликативный функтор из замыкания (монада)](https://youtu.be/3Z7f0Gi8pxw?t=1088) +- [00:23:11 Пример применения монады ](https://youtu.be/3Z7f0Gi8pxw?t=1391) +- [00:28:37 Функциональный объект ](https://youtu.be/3Z7f0Gi8pxw?t=1717) +- [00:39:44 Пример применения функционального объекта](https://youtu.be/3Z7f0Gi8pxw?t=2384) +- [00:45:27 Обобщение](https://youtu.be/3Z7f0Gi8pxw?t=2727) + +## [Отмена асинхронных операций, cancellable callback and Promise в JavaScript](https://youtu.be/T8fXlnqI4Ws) + +## [Future: Асинхронность на фьючерах без состояния](https://youtu.be/22ONv3AGXdk) + +## [Примеси, обертки, декораторы, мемоизация](https://youtu.be/2h9syXN5wO0) + +- [00:00:00 Синхронная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=0) +- [00:02:55 Синхронная универсальная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=175) +- [00:08:28 Асинхронная универсальная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=508) +- [00:15:50 Синхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/2h9syXN5wO0?t=950) +- [00:22:45 Асинхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/2h9syXN5wO0?t=1365) +- [00:25:38 Функция-обертка, которая ограничивает вызов функции до одного вызова (once) ](https://youtu.be/2h9syXN5wO0?t=1538) +- [00:27:36 Функция-обертка, которая ограничивает вызов функции до n-го вызова (limit)](https://youtu.be/2h9syXN5wO0?t=1656) +- [00:29:50 Функция-обертка, которая отменяет вызов функции (cancel)](https://youtu.be/2h9syXN5wO0?t=1790) +- [00:32:29 Функция-обертка с методами timeout, limit, cancel](https://youtu.be/2h9syXN5wO0?t=1949) +- [00:39:03 Функция-обертка с методами timeout, limit, cancel (оптимизированная)](https://youtu.be/2h9syXN5wO0?t=2343) +- [00:42:28 Функция-обертка, которая ограничивает один вызов за 200 мс (throttle)](https://youtu.be/2h9syXN5wO0?t=2548) +- [00:45:47 Примесь поля через точку ](https://youtu.be/2h9syXN5wO0?t=2747) +- [00:51:35 Примесь поля через функцию extend](https://youtu.be/2h9syXN5wO0?t=3095) +- [00:57:35 Примесь поля через object.assign( )](https://youtu.be/2h9syXN5wO0?t=3455) +- [00:59:18 Примесь поведения ](https://youtu.be/2h9syXN5wO0?t=3558) +- [01:02:23 Примесь изменения класса](https://youtu.be/2h9syXN5wO0?t=3743) +- [01:06:50 Определение](https://youtu.be/2h9syXN5wO0?t=4010) +- [01:07:30 Реализация простой мемоизации ](https://youtu.be/2h9syXN5wO0?t=4050) +- [01:14:43 Реализация простой мемоизации с проверкой скорости ](https://youtu.be/2h9syXN5wO0?t=4483) +- [01:20:43 Удаление накопленного кэша ](https://youtu.be/2h9syXN5wO0?t=4843) +- [01:25:35 Асинхронная мемоизация ](https://youtu.be/2h9syXN5wO0?t=5135) +- [01:31:10 Преобразование аргументов и ключей в hash-функцию](https://youtu.be/2h9syXN5wO0?t=5470) +- [01:33:32 Реализация сложной мемоизации](https://youtu.be/2h9syXN5wO0?t=5612) + +## [Мемоизация функций: memoize в JavaScript](https://youtu.be/H6S8QJo2Qxg) + +## [Композиция функций (pipe, compose) в JavaScript](https://youtu.be/xS9FicVrOTI) diff --git a/Courses/Functional.md b/Courses/Functional.md index 21e382e..57cfee5 100644 --- a/Courses/Functional.md +++ b/Courses/Functional.md @@ -29,168 +29,3 @@ - [Асинхронная композиция функций](https://youtu.be/3ZCrMlMpOrM) - Примеры кода: https://github.com/HowProgrammingWorks/AsyncCompose - [Принцип подстановки Барбары Лисков](https://youtu.be/RbhYxygxroc) - -# Functional programming (таймкоды) - -## [Функции, лямбды (стрелочные функции), контексты, замыкания в JavaScript](https://youtu.be/pn5myCmpV2U) - -- [00:00:00 Введение ](https://youtu.be/pn5myCmpV2U?t=0) -- [00:11:22 Функция объявление (Declaration)](https://youtu.be/pn5myCmpV2U?t=682) -- [00:12:46 Функция выражение (Expression)](https://youtu.be/pn5myCmpV2U?t=766) -- [00:16:07 Лямбда-выражение (Lambda expression) или функция-стрелка (Arrow function) ](https://youtu.be/pn5myCmpV2U?t=967) -- [00:16:43 Лямбда-функция (Lambda function) ](https://youtu.be/pn5myCmpV2U?t=1003) -- [00:18:45 Область видимости (Scope)](https://youtu.be/pn5myCmpV2U?t=1125) -- [00:25:00 Функции, как абстракции](https://youtu.be/pn5myCmpV2U?t=1500) -- [00:26:43 Методы функции (name, length, toString( ) )](https://youtu.be/pn5myCmpV2U?t=1603) -- [00:31:26 Значения по умолчанию у функции ](https://youtu.be/pn5myCmpV2U?t=1886) -- [00:36:46 Rest-оператор (...args)](https://youtu.be/pn5myCmpV2U?t=2206) -- [00:41:49 Способ определения функции, через new Function](https://youtu.be/pn5myCmpV2U?t=2509) -- [00:44:46 Функции внутри объекта](https://youtu.be/pn5myCmpV2U?t=2686) -- [00:50:42 Обращение к полям объекта из привязанной функции, через this](https://youtu.be/pn5myCmpV2U?t=3042) -- [00:55:24 История синтаксиса создания контекстов, через самовызывающиеся функции ( IIFE)](https://youtu.be/pn5myCmpV2U?t=3324) -- [00:58:30 Методы функции, наследуемой от объекта (call, apply)](https://youtu.be/pn5myCmpV2U?t=3510) -- [01:00:53 Комментирование функций](https://youtu.be/pn5myCmpV2U?t=3653) -- [01:01:27 Задание декомпозиции функции](https://youtu.be/pn5myCmpV2U?t=3687) -- [01:04:24 Замыкание: context ](https://youtu.be/pn5myCmpV2U?t=3864) -- [01:08:41 Замыкание: chainning ](https://youtu.be/pn5myCmpV2U?t=4121) -- [01:11:55 Замыкание: summator ](https://youtu.be/pn5myCmpV2U?t=4315) -- [01:14:16 Замыкание: recursion](https://youtu.be/pn5myCmpV2U?t=4456) - -## [Частичное применение и каррирование в JavaScript ( Partial application )](https://youtu.be/ND8KQ5xjk7o) - -- [00:00:00 Замыкание ](https://youtu.be/ND8KQ5xjk7o?t=0) -- [00:04:54 Лямбда- функция ](https://youtu.be/ND8KQ5xjk7o?t=294) -- [00:06:06 Метод bind ](https://youtu.be/ND8KQ5xjk7o?t=366) -- [00:08:30 Абстрагированный пример функции ](https://youtu.be/ND8KQ5xjk7o?t=510) -- [00:13:42 Абстрагированный пример функции (расширение) ](https://youtu.be/ND8KQ5xjk7o?t=822) -- [00:15:47 Неправильная реализация каррирования ](https://youtu.be/ND8KQ5xjk7o?t=947) -- [00:22:22 Правильная реализация каррирования ](https://youtu.be/ND8KQ5xjk7o?t=1342) -- [00:28:54 Правильная реализация каррирования (расширение)](https://youtu.be/ND8KQ5xjk7o?t=1734) -- [00:31:41 Функциональные абстракции (superposition)](https://youtu.be/ND8KQ5xjk7o?t=1901) -- [00:38:02 Функциональные абстракции, с сохранением выражений (composition)](https://youtu.be/ND8KQ5xjk7o?t=2282) -- [00:45:05 Композиция с 2 функциями](https://youtu.be/ND8KQ5xjk7o?t=2705) -- [00:46:05 Композиция с n - функциями, при помощи метода reduce](https://youtu.be/ND8KQ5xjk7o?t=2765) -- [00:51:25 Композиция с n - функциями, при помощи цикла ](https://youtu.be/ND8KQ5xjk7o?t=3085) -- [00:54:29 Композиция с n - функциями, при помощи рекурсии](https://youtu.be/ND8KQ5xjk7o?t=3269) -- [00:57:40 Композиция асинхронных функций ](https://youtu.be/ND8KQ5xjk7o?t=3460) -- [01:01:27 Обобщение](https://youtu.be/ND8KQ5xjk7o?t=3687) - -## [Функции высшего порядка, колбеки, события на JavaScript (HigherOrderFunctions, callbacks, events)](https://youtu.be/1vqATwbGHnc) - -- [00:00:00 Определение ](https://youtu.be/1vqATwbGHnc?t=0) -- [00:02:03 Математическая функция ](https://youtu.be/1vqATwbGHnc?t=123) -- [00:05:57 Функция обратного вызова (callback) ](https://youtu.be/1vqATwbGHnc?t=357) -- [00:09:33 Замыкание ](https://youtu.be/1vqATwbGHnc?t=573) -- [00:10:51 Цепочка вызовов ](https://youtu.be/1vqATwbGHnc?t=651) -- [00:12:40 Сохранение кэша с помощью замыкания](https://youtu.be/1vqATwbGHnc?t=760) -- [00:18:29 Добавление функции поведение логирования](https://youtu.be/1vqATwbGHnc?t=1109) -- [00:21:45 Обобщение ](https://youtu.be/1vqATwbGHnc?t=1305) -- [00:22:45 Сallback](https://youtu.be/1vqATwbGHnc?t=1365) -- [00:25:32 Сallback асинхронной функции считывание файла](https://youtu.be/1vqATwbGHnc?t=1532) -- [00:28:36 Сallback именованный](https://youtu.be/1vqATwbGHnc?t=1716) -- [00:33:01 Сallback-timer ](https://youtu.be/1vqATwbGHnc?t=1981) -- [00:36:20 Сallback-timer-curry](https://youtu.be/1vqATwbGHnc?t=2180) -- [00:38:59 Listener](https://youtu.be/1vqATwbGHnc?t=2339) -- [00:41:10 Listener-timer](https://youtu.be/1vqATwbGHnc?t=2470) -- [00:46:59 Event](https://youtu.be/1vqATwbGHnc?t=2819) -- [00:53:45 Event-imitter ](https://youtu.be/1vqATwbGHnc?t=3225) -- [00:57:48 Deferred object (отложенный объект)](https://youtu.be/1vqATwbGHnc?t=3468) -- [01:01:31 Errors](https://youtu.be/1vqATwbGHnc?t=3691) - -## [Примеси, обертки, декораторы, мемоизация в JavaScript (Wrappers)](https://youtu.be/oRQ0kQr1N-U) - -- [00:00:00 Синхронная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=0) -- [00:02:55 Синхронная универсальная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=175) -- [00:08:28 Асинхронная универсальная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=508) -- [00:15:50 Синхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/oRQ0kQr1N-U?t=950) -- [00:22:45 Асинхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/oRQ0kQr1N-U?t=1365) -- [00:25:38 Функция-обертка, которая ограничивает вызов функции до одного вызова (once) ](https://youtu.be/oRQ0kQr1N-U?t=1538) -- [00:27:36 Функция-обертка, которая ограничивает вызов функции до n-го вызова (limit)](https://youtu.be/oRQ0kQr1N-U?t=1656) -- [00:29:50 Функция-обертка, которая отменяет вызов функции (cancel)](https://youtu.be/oRQ0kQr1N-U?t=1790) -- [00:32:29 Функция-обертка с методами timeout, limit, cancel](https://youtu.be/oRQ0kQr1N-U?t=1949) -- [00:39:03 Функция-обертка с методами timeout, limit, cancel (оптимизированная)](https://youtu.be/oRQ0kQr1N-U?t=2343) -- [00:42:28 Функция-обертка, которая ограничивает один вызов за 200 мс (throttle)](https://youtu.be/oRQ0kQr1N-U?t=2548) -- [00:45:47 Примесь поля через точку ](https://youtu.be/oRQ0kQr1N-U?t=2747) -- [00:51:35 Примесь поля через функцию extend](https://youtu.be/oRQ0kQr1N-U?t=3095) -- [00:57:35 Примесь поля через object.assign( )](https://youtu.be/oRQ0kQr1N-U?t=3455) -- [00:59:18 Примесь поведения ](https://youtu.be/oRQ0kQr1N-U?t=3558) -- [01:02:23 Примесь изменения класса](https://youtu.be/oRQ0kQr1N-U?t=3743) -- [01:06:50 Определение](https://youtu.be/oRQ0kQr1N-U?t=4010) -- [01:07:30 Реализация простой мемоизации ](https://youtu.be/oRQ0kQr1N-U?t=4050) -- [01:14:43 Реализация простой мемоизации с проверкой скорости ](https://youtu.be/oRQ0kQr1N-U?t=4483) -- [01:20:43 Удаление накопленного кэша ](https://youtu.be/oRQ0kQr1N-U?t=4843) -- [01:25:35 Асинхронная мемоизация ](https://youtu.be/oRQ0kQr1N-U?t=5135) -- [01:31:10 Преобразование аргументов и ключей в hash-функцию](https://youtu.be/oRQ0kQr1N-U?t=5470) -- [01:33:32 Реализация сложной мемоизации](https://youtu.be/oRQ0kQr1N-U?t=5612) - -## [Чеининг функций и объектов, обработка ошибок в JavaScript](https://youtu.be/PfuEfIiLX34) - -- [00:00:00 Введение ](https://youtu.be/PfuEfIiLX34?t=0) -- [00:01:10 Чеининг через синтаксис вызова функций ](https://youtu.be/PfuEfIiLX34?t=70) -- [00:02:12 Prototype ](https://youtu.be/PfuEfIiLX34?t=132) -- [00:05:45 Сlass](https://youtu.be/PfuEfIiLX34?t=345) -- [00:06:11 Functor](https://youtu.be/PfuEfIiLX34?t=371) -- [00:11:54 Mutable](https://youtu.be/PfuEfIiLX34?t=714) -- [00:16:34 Iterator](https://youtu.be/PfuEfIiLX34?t=994) -- [00:26:18 Promise ](https://youtu.be/PfuEfIiLX34?t=1578) -- [00:26:35 Test](https://youtu.be/PfuEfIiLX34?t=1595) -- [00:37:08 Compare ](https://youtu.be/PfuEfIiLX34?t=2228) -- [00:39:45 Benchmark](https://youtu.be/PfuEfIiLX34?t=2385) -- [00:40:48 Запуск и анализ тестов ](https://youtu.be/PfuEfIiLX34?t=2448) -- [01:03:48 Первый способ возвращение ошибок в синхронном коде ](https://youtu.be/PfuEfIiLX34?t=3828) -- [01:09:24 Второй способ возвращение ошибок в синхронном коде ](https://youtu.be/PfuEfIiLX34?t=4164) -- [01:12:26 Возвращение ошибок в асинхронном коде ](https://youtu.be/PfuEfIiLX34?t=4346) -- [01:16:14 Корректное возвращение ошибок ](https://youtu.be/PfuEfIiLX34?t=4574) -- [01:20:03 Обработка ошибок c promise ](https://youtu.be/PfuEfIiLX34?t=4803) -- [01:23:58 Обработка ошибок c async-await](https://youtu.be/PfuEfIiLX34?t=5038) - -## [Функциональное программирование на JavaScript](https://youtu.be/0JxSs_GcvbQ) - -## [Функциональные объекты, функторы и монады в JavaScript](https://youtu.be/3Z7f0Gi8pxw) - -- [00:00:00 Определение функтора ](https://youtu.be/3Z7f0Gi8pxw?t=0) -- [00:01:40 Функтор из прототипа ](https://youtu.be/3Z7f0Gi8pxw?t=100) -- [00:08:17 Функтор из прототипа (упрощенный) ](https://youtu.be/3Z7f0Gi8pxw?t=497) -- [00:09:14 Функтор из замыкания ](https://youtu.be/3Z7f0Gi8pxw?t=554) -- [00:11:49 Функтор из замыкания с тернарным оператором](https://youtu.be/3Z7f0Gi8pxw?t=709) -- [00:12:44 Аппликативный функтор из прототипа ](https://youtu.be/3Z7f0Gi8pxw?t=764) -- [00:18:08 Аппликативный функтор из замыкания (монада)](https://youtu.be/3Z7f0Gi8pxw?t=1088) -- [00:23:11 Пример применения монады ](https://youtu.be/3Z7f0Gi8pxw?t=1391) -- [00:28:37 Функциональный объект ](https://youtu.be/3Z7f0Gi8pxw?t=1717) -- [00:39:44 Пример применения функционального объекта](https://youtu.be/3Z7f0Gi8pxw?t=2384) -- [00:45:27 Обобщение](https://youtu.be/3Z7f0Gi8pxw?t=2727) - -## [Отмена асинхронных операций, cancellable callback and Promise в JavaScript](https://youtu.be/T8fXlnqI4Ws) - -## [Future: Асинхронность на фьючерах без состояния](https://youtu.be/22ONv3AGXdk) - -## [Примеси, обертки, декораторы, мемоизация](https://youtu.be/2h9syXN5wO0) - -- [00:00:00 Синхронная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=0) -- [00:02:55 Синхронная универсальная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=175) -- [00:08:28 Асинхронная универсальная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=508) -- [00:15:50 Синхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/2h9syXN5wO0?t=950) -- [00:22:45 Асинхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/2h9syXN5wO0?t=1365) -- [00:25:38 Функция-обертка, которая ограничивает вызов функции до одного вызова (once) ](https://youtu.be/2h9syXN5wO0?t=1538) -- [00:27:36 Функция-обертка, которая ограничивает вызов функции до n-го вызова (limit)](https://youtu.be/2h9syXN5wO0?t=1656) -- [00:29:50 Функция-обертка, которая отменяет вызов функции (cancel)](https://youtu.be/2h9syXN5wO0?t=1790) -- [00:32:29 Функция-обертка с методами timeout, limit, cancel](https://youtu.be/2h9syXN5wO0?t=1949) -- [00:39:03 Функция-обертка с методами timeout, limit, cancel (оптимизированная)](https://youtu.be/2h9syXN5wO0?t=2343) -- [00:42:28 Функция-обертка, которая ограничивает один вызов за 200 мс (throttle)](https://youtu.be/2h9syXN5wO0?t=2548) -- [00:45:47 Примесь поля через точку ](https://youtu.be/2h9syXN5wO0?t=2747) -- [00:51:35 Примесь поля через функцию extend](https://youtu.be/2h9syXN5wO0?t=3095) -- [00:57:35 Примесь поля через object.assign( )](https://youtu.be/2h9syXN5wO0?t=3455) -- [00:59:18 Примесь поведения ](https://youtu.be/2h9syXN5wO0?t=3558) -- [01:02:23 Примесь изменения класса](https://youtu.be/2h9syXN5wO0?t=3743) -- [01:06:50 Определение](https://youtu.be/2h9syXN5wO0?t=4010) -- [01:07:30 Реализация простой мемоизации ](https://youtu.be/2h9syXN5wO0?t=4050) -- [01:14:43 Реализация простой мемоизации с проверкой скорости ](https://youtu.be/2h9syXN5wO0?t=4483) -- [01:20:43 Удаление накопленного кэша ](https://youtu.be/2h9syXN5wO0?t=4843) -- [01:25:35 Асинхронная мемоизация ](https://youtu.be/2h9syXN5wO0?t=5135) -- [01:31:10 Преобразование аргументов и ключей в hash-функцию](https://youtu.be/2h9syXN5wO0?t=5470) -- [01:33:32 Реализация сложной мемоизации](https://youtu.be/2h9syXN5wO0?t=5612) - -## [Мемоизация функций: memoize в JavaScript](https://youtu.be/H6S8QJo2Qxg) - -## [Композиция функций (pipe, compose) в JavaScript](https://youtu.be/xS9FicVrOTI) - From 12f07a06df6bc15a0afbe16dae698cf2cd0008c4 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 4 Aug 2022 18:32:53 +0300 Subject: [PATCH 010/217] Format timings --- Courses/Asynchronous-timecodes.md | 132 ++++++------- Courses/NodeJS-timecodes.md | 304 +++++++++++++++--------------- 2 files changed, 218 insertions(+), 218 deletions(-) diff --git a/Courses/Asynchronous-timecodes.md b/Courses/Asynchronous-timecodes.md index 56a7d63..1f08c4f 100644 --- a/Courses/Asynchronous-timecodes.md +++ b/Courses/Asynchronous-timecodes.md @@ -4,70 +4,70 @@ ## [Асинхронное программирование в Node.js и JavaScript](https://youtu.be/hY6Z6qNYzmc) -- [5:45 Callbacks](https://youtu.be/hY6Z6qNYzmc?t=345) -- [10:00 Async.js or analogues](https://youtu.be/hY6Z6qNYzmc?t=600) -- [15:47 Events](https://youtu.be/hY6Z6qNYzmc?t=947) -- [18:00 Promise](https://youtu.be/hY6Z6qNYzmc?t=1080) -- [25:20 async/await](https://youtu.be/hY6Z6qNYzmc?t=1520) -- [27:10 Functor + Chaining + composition](https://youtu.be/hY6Z6qNYzmc?t=1630) -- [30:49 Problems of callback, async.js, Proimise, async/await](https://youtu.be/hY6Z6qNYzmc?t=1849) -- [34:00 Add timeout to any function](https://youtu.be/hY6Z6qNYzmc?t=2040) -- [36:55 Make function cancelable](https://youtu.be/hY6Z6qNYzmc?t=2215) -- [37:59 More wrappers](https://youtu.be/hY6Z6qNYzmc?t=2279) -- [39:22 Promisify and Callbackify](https://youtu.be/hY6Z6qNYzmc?t=2362) -- [48:47 Sync function to async](https://youtu.be/hY6Z6qNYzmc?t=2927) -- [41:43 Sync function to Promise](https://youtu.be/hY6Z6qNYzmc?t=2503) -- [43:17 Convertors](https://youtu.be/hY6Z6qNYzmc?t=2597) -- [43:31 Metasync](https://youtu.be/hY6Z6qNYzmc?t=2611) -- [45:26 Function composition](https://youtu.be/hY6Z6qNYzmc?t=2726) -- [47:09 Asynchronous function composition](https://youtu.be/hY6Z6qNYzmc?t=2829) -- [47:58 Flow communication like in electronics](https://youtu.be/hY6Z6qNYzmc?t=2878) -- [50:06 Collectors](https://youtu.be/hY6Z6qNYzmc?t=3006) -- [59:17 Queue](https://youtu.be/hY6Z6qNYzmc?t=3557) +- [05:45 Callbacks](https://youtu.be/hY6Z6qNYzmc?t=345) +- [10:00 Async.js or analogues](https://youtu.be/hY6Z6qNYzmc?t=600) +- [15:47 Events](https://youtu.be/hY6Z6qNYzmc?t=947) +- [18:00 Promise](https://youtu.be/hY6Z6qNYzmc?t=1080) +- [25:20 async/await](https://youtu.be/hY6Z6qNYzmc?t=1520) +- [27:10 Functor + Chaining + composition](https://youtu.be/hY6Z6qNYzmc?t=1630) +- [30:49 Problems of callback, async.js, Proimise, async/await](https://youtu.be/hY6Z6qNYzmc?t=1849) +- [34:00 Add timeout to any function](https://youtu.be/hY6Z6qNYzmc?t=2040) +- [36:55 Make function cancelable](https://youtu.be/hY6Z6qNYzmc?t=2215) +- [37:59 More wrappers](https://youtu.be/hY6Z6qNYzmc?t=2279) +- [39:22 Promisify and Callbackify](https://youtu.be/hY6Z6qNYzmc?t=2362) +- [48:47 Sync function to async](https://youtu.be/hY6Z6qNYzmc?t=2927) +- [41:43 Sync function to Promise](https://youtu.be/hY6Z6qNYzmc?t=2503) +- [43:17 Convertors](https://youtu.be/hY6Z6qNYzmc?t=2597) +- [43:31 Metasync](https://youtu.be/hY6Z6qNYzmc?t=2611) +- [45:26 Function composition](https://youtu.be/hY6Z6qNYzmc?t=2726) +- [47:09 Asynchronous function composition](https://youtu.be/hY6Z6qNYzmc?t=2829) +- [47:58 Flow communication like in electronics](https://youtu.be/hY6Z6qNYzmc?t=2878) +- [50:06 Collectors](https://youtu.be/hY6Z6qNYzmc?t=3006) +- [59:17 Queue](https://youtu.be/hY6Z6qNYzmc?t=3557) ## [Таймеры, таймауты, EventEmitter в JavaScript и Node.js](https://youtu.be/LK2jveAnRNg) -- [0:30 callback sync/async](https://youtu.be/LK2jveAnRNg?t=30) -- [1:35 временная задержка sleep.js](https://youtu.be/LK2jveAnRNg?t=95) -- [5:35 await-sleep.js](https://youtu.be/LK2jveAnRNg?t=335) -- [8:40 sleep-then.js](https://youtu.be/LK2jveAnRNg?t=520) -- [9:30 order.js](https://youtu.be/LK2jveAnRNg?t=570) -- [18:38 precision.js](https://youtu.be/LK2jveAnRNg?t=1118) -- [22:13 blocking.js](https://youtu.be/LK2jveAnRNg?t=1333) -- [22:50 timers.js](https://youtu.be/LK2jveAnRNg?t=1370) -- [29:35 ref-unref.js](https://youtu.be/LK2jveAnRNg?t=1775) -- [32:05 enroll.js](https://youtu.be/LK2jveAnRNg?t=1925) -- [34:57 eventloop.txt](https://youtu.be/LK2jveAnRNg?t=2097) -- [37:37 eventEmitter](https://youtu.be/LK2jveAnRNg?t=2257) -- [44:32 simple.js](https://youtu.be/LK2jveAnRNg?t=2672) -- [47:48 usage.js](https://youtu.be/LK2jveAnRNg?t=2868) -- [48:30 enhanced.js](https://youtu.be/LK2jveAnRNg?t=2910) -- [50:18 star-fix.js](https://youtu.be/LK2jveAnRNg?t=3018) -- [51:10 usage.js](https://youtu.be/LK2jveAnRNg?t=3070) -- [53:15 closure.js](https://youtu.be/LK2jveAnRNg?t=3195) -- [54:50 fp.js](https://youtu.be/LK2jveAnRNg?t=3290) -- [57:10 methods.js](https://youtu.be/LK2jveAnRNg?t=3430) -- [1:06:35 min.js](https://youtu.be/LK2jveAnRNg?t=3995) -- [1:12:31 prod.js](https://youtu.be/LK2jveAnRNg?t=4351) +- [00:30 callback sync/async](https://youtu.be/LK2jveAnRNg?t=30) +- [01:35 временная задержка sleep.js](https://youtu.be/LK2jveAnRNg?t=95) +- [05:35 await-sleep.js](https://youtu.be/LK2jveAnRNg?t=335) +- [08:40 sleep-then.js](https://youtu.be/LK2jveAnRNg?t=520) +- [09:30 order.js](https://youtu.be/LK2jveAnRNg?t=570) +- [18:38 precision.js](https://youtu.be/LK2jveAnRNg?t=1118) +- [22:13 blocking.js](https://youtu.be/LK2jveAnRNg?t=1333) +- [22:50 timers.js](https://youtu.be/LK2jveAnRNg?t=1370) +- [29:35 ref-unref.js](https://youtu.be/LK2jveAnRNg?t=1775) +- [32:05 enroll.js](https://youtu.be/LK2jveAnRNg?t=1925) +- [34:57 eventloop.txt](https://youtu.be/LK2jveAnRNg?t=2097) +- [37:37 eventEmitter](https://youtu.be/LK2jveAnRNg?t=2257) +- [44:32 simple.js](https://youtu.be/LK2jveAnRNg?t=2672) +- [47:48 usage.js](https://youtu.be/LK2jveAnRNg?t=2868) +- [48:30 enhanced.js](https://youtu.be/LK2jveAnRNg?t=2910) +- [50:18 star-fix.js](https://youtu.be/LK2jveAnRNg?t=3018) +- [51:10 usage.js](https://youtu.be/LK2jveAnRNg?t=3070) +- [53:15 closure.js](https://youtu.be/LK2jveAnRNg?t=3195) +- [54:50 fp.js](https://youtu.be/LK2jveAnRNg?t=3290) +- [57:10 methods.js](https://youtu.be/LK2jveAnRNg?t=3430) +- [1:06:35 min.js](https://youtu.be/LK2jveAnRNg?t=3995) +- [1:12:31 prod.js](https://youtu.be/LK2jveAnRNg?t=4351) ## [Асинхронное программирование на callback`ах в JavaScript](https://youtu.be/z8Hg6zgi3yQ) -- [1:20 пример callback функции](https://youtu.be/z8Hg6zgi3yQ?t=80) -- [2:40 пример последовательного исполнения callback функций](https://youtu.be/z8Hg6zgi3yQ?t=160) -- [5:52 пример параллельного исполнения async функций c использованием wrapAsync](https://youtu.be/z8Hg6zgi3yQ?t=352) -- [15:18 пример последовательного исполнения async функций c использованием wrapAsync](https://youtu.be/z8Hg6zgi3yQ?t=918) -- [19:05 chain исполнение async функций](https://youtu.be/z8Hg6zgi3yQ?t=1145) -- [41:16 где можно встретить асинхронные функции](https://youtu.be/z8Hg6zgi3yQ?t=2476) +- [01:20 пример callback функции](https://youtu.be/z8Hg6zgi3yQ?t=80) +- [02:40 пример последовательного исполнения callback функций](https://youtu.be/z8Hg6zgi3yQ?t=160) +- [05:52 пример параллельного исполнения async функций c использованием wrapAsync](https://youtu.be/z8Hg6zgi3yQ?t=352) +- [15:18 пример последовательного исполнения async функций c использованием wrapAsync](https://youtu.be/z8Hg6zgi3yQ?t=918) +- [19:05 chain исполнение async функций](https://youtu.be/z8Hg6zgi3yQ?t=1145) +- [41:16 где можно встретить асинхронные функции](https://youtu.be/z8Hg6zgi3yQ?t=2476) ## [Неблокирующее асинхронное итерирование в JavaScript](https://youtu.be/wYA2cIRYLoA) -- [1:02 блокирующее итерирование по массиву](https://youtu.be/wYA2cIRYLoA?t=62) -- [3:24 блокирующее итерирование с помощью for await](https://youtu.be/wYA2cIRYLoA?t=204) -- [4:47 неблокирующее итерирование с помощью setTimeout](https://youtu.be/wYA2cIRYLoA?t=287) -- [6:45 неблокирующее итерирование с помощью for await](https://youtu.be/wYA2cIRYLoA?t=405) -- [8:20 неблокирующее итерирование без задержки](https://youtu.be/wYA2cIRYLoA?t=500) -- [13:00 неблокирующее итерирование без задержки с помощью for await](https://youtu.be/wYA2cIRYLoA?t=780) -- [19:30 использование асинхронного итерирования для обычных массивов](https://youtu.be/wYA2cIRYLoA?t=1170) +- [01:02 блокирующее итерирование по массиву](https://youtu.be/wYA2cIRYLoA?t=62) +- [03:24 блокирующее итерирование с помощью for await](https://youtu.be/wYA2cIRYLoA?t=204) +- [04:47 неблокирующее итерирование с помощью setTimeout](https://youtu.be/wYA2cIRYLoA?t=287) +- [06:45 неблокирующее итерирование с помощью for await](https://youtu.be/wYA2cIRYLoA?t=405) +- [08:20 неблокирующее итерирование без задержки](https://youtu.be/wYA2cIRYLoA?t=500) +- [13:00 неблокирующее итерирование без задержки с помощью for await](https://youtu.be/wYA2cIRYLoA?t=780) +- [19:30 использование асинхронного итерирования для обычных массивов](https://youtu.be/wYA2cIRYLoA?t=1170) ## [Асинхронность с библиотекой async.js](https://youtu.be/XQ94wQc-erU) @@ -85,17 +85,17 @@ ## [Генераторы и асинхронные генераторы в JavaScript](https://youtu.be/kvNm9D32s8s) -- [00:00 Способы объявления генераторов ](https://youtu.be/kvNm9D32s8s?t=0) -- [10:41 Пример генератора с yield ](https://youtu.be/kvNm9D32s8s?t=641) -- [15:54 Пример генератора с yield и return ](https://youtu.be/kvNm9D32s8s?t=954) -- [18:47 Получение значений из генератора циклом for...of ](https://youtu.be/kvNm9D32s8s?t=1127) -- [21:04 Получение значений из генератора spead - оператором ](https://youtu.be/kvNm9D32s8s?t=1264) -- [21:50 Метод next ](https://youtu.be/kvNm9D32s8s?t=1310) -- [23:30 Пример генератора с yield * возвращающего итерируемые объекты ](https://youtu.be/kvNm9D32s8s?t=1410) -- [25:05 Пример генератора с yield * возвращающего другие генераторы ](https://youtu.be/kvNm9D32s8s?t=1505) -- [26:18 Метод return ](https://youtu.be/kvNm9D32s8s?t=1578) -- [28:11 Метод throw](https://youtu.be/kvNm9D32s8s?t=1691) -- [29:05 Обобщение](https://youtu.be/kvNm9D32s8s?t=1745) +- [00:00 Способы объявления генераторов](https://youtu.be/kvNm9D32s8s?t=0) +- [10:41 Пример генератора с yield](https://youtu.be/kvNm9D32s8s?t=641) +- [15:54 Пример генератора с yield и return](https://youtu.be/kvNm9D32s8s?t=954) +- [18:47 Получение значений из генератора циклом for...of](https://youtu.be/kvNm9D32s8s?t=1127) +- [21:04 Получение значений из генератора spead - оператором](https://youtu.be/kvNm9D32s8s?t=1264) +- [21:50 Метод next](https://youtu.be/kvNm9D32s8s?t=1310) +- [23:30 Пример генератора с yield * возвращающего итерируемые объекты](https://youtu.be/kvNm9D32s8s?t=1410) +- [25:05 Пример генератора с yield * возвращающего другие генераторы](https://youtu.be/kvNm9D32s8s?t=1505) +- [26:18 Метод return](https://youtu.be/kvNm9D32s8s?t=1578) +- [28:11 Метод throw](https://youtu.be/kvNm9D32s8s?t=1691) +- [29:05 Обобщение](https://youtu.be/kvNm9D32s8s?t=1745) ## [Итераторы и асинхронные итераторы в JavaScript](https://youtu.be/rBGFlWpVpGs) diff --git a/Courses/NodeJS-timecodes.md b/Courses/NodeJS-timecodes.md index 35abd2d..1bc5f20 100644 --- a/Courses/NodeJS-timecodes.md +++ b/Courses/NodeJS-timecodes.md @@ -4,141 +4,141 @@ ## [Node.js Введение в технологию](https://youtu.be/WBcHgaoHh1k) -- [2:53 Основные идеи Node.js](https://youtu.be/WBcHgaoHh1k?t=173) -- [13:09 Приемущества/Недостатки JavaScript](https://youtu.be/WBcHgaoHh1k?t=789) -- [16:58 Что такое Node.js](https://youtu.be/WBcHgaoHh1k?t=1018) -- [20:52 Начало работы с Node.js](https://youtu.be/WBcHgaoHh1k?t=1252) -- [25:00 Встроенный API](https://youtu.be/WBcHgaoHh1k?t=1500) -- [33:55 Менеджер пакетов NPM](https://youtu.be/WBcHgaoHh1k?t=2035) -- [40:45 Структура проектов](https://youtu.be/WBcHgaoHh1k?t=2445) -- [44:35 Файлы package.json, package-lock.json](https://youtu.be/WBcHgaoHh1k?t=2675) -- [52:03 Репозиторий NPM](https://youtu.be/WBcHgaoHh1k?t=3123) -- [59:50 Однопоточность и многопоточность](https://youtu.be/WBcHgaoHh1k?t=3590) -- [1:05:30 Межпроцессовое взаимодействие](https://youtu.be/WBcHgaoHh1k?t=3930) -- [1:06:08 Асинхронный ввод/вывод](https://youtu.be/WBcHgaoHh1k?t=3968) -- [1:11:11 Производительность](https://youtu.be/WBcHgaoHh1k?t=4271) -- [1:13:02 Память](https://youtu.be/WBcHgaoHh1k?t=4382) -- [1:16:21 Отладка и профилирование](https://youtu.be/WBcHgaoHh1k?t=4581) -- [1:21:27 Ошибки](https://youtu.be/WBcHgaoHh1k?t=4887) -- [1:26:42 Обновление кода и перезапуск](https://youtu.be/WBcHgaoHh1k?t=5202) -- [1:28:43 Ассинхронное программирование](https://youtu.be/WBcHgaoHh1k?t=5323) -- [1:30:00 Примеры внедрения, интеракт. TV](https://youtu.be/WBcHgaoHh1k?t=5400) -- [1:31:00 Сферы применения Node.js](https://youtu.be/WBcHgaoHh1k?t=5460) -- [1:36:44 Полезные материалы](https://youtu.be/WBcHgaoHh1k?t=5804) +- [02:53 Основные идеи Node.js](https://youtu.be/WBcHgaoHh1k?t=173) +- [13:09 Приемущества/Недостатки JavaScript](https://youtu.be/WBcHgaoHh1k?t=789) +- [16:58 Что такое Node.js](https://youtu.be/WBcHgaoHh1k?t=1018) +- [20:52 Начало работы с Node.js](https://youtu.be/WBcHgaoHh1k?t=1252) +- [25:00 Встроенный API](https://youtu.be/WBcHgaoHh1k?t=1500) +- [33:55 Менеджер пакетов NPM](https://youtu.be/WBcHgaoHh1k?t=2035) +- [40:45 Структура проектов](https://youtu.be/WBcHgaoHh1k?t=2445) +- [44:35 Файлы package.json, package-lock.json](https://youtu.be/WBcHgaoHh1k?t=2675) +- [52:03 Репозиторий NPM](https://youtu.be/WBcHgaoHh1k?t=3123) +- [59:50 Однопоточность и многопоточность](https://youtu.be/WBcHgaoHh1k?t=3590) +- [1:05:30 Межпроцессовое взаимодействие](https://youtu.be/WBcHgaoHh1k?t=3930) +- [1:06:08 Асинхронный ввод/вывод](https://youtu.be/WBcHgaoHh1k?t=3968) +- [1:11:11 Производительность](https://youtu.be/WBcHgaoHh1k?t=4271) +- [1:13:02 Память](https://youtu.be/WBcHgaoHh1k?t=4382) +- [1:16:21 Отладка и профилирование](https://youtu.be/WBcHgaoHh1k?t=4581) +- [1:21:27 Ошибки](https://youtu.be/WBcHgaoHh1k?t=4887) +- [1:26:42 Обновление кода и перезапуск](https://youtu.be/WBcHgaoHh1k?t=5202) +- [1:28:43 Ассинхронное программирование](https://youtu.be/WBcHgaoHh1k?t=5323) +- [1:30:00 Примеры внедрения, интеракт. TV](https://youtu.be/WBcHgaoHh1k?t=5400) +- [1:31:00 Сферы применения Node.js](https://youtu.be/WBcHgaoHh1k?t=5460) +- [1:36:44 Полезные материалы](https://youtu.be/WBcHgaoHh1k?t=5804) ## [Node.js в 2019 году (состояние и перспективы)](https://youtu.be/CUU49jjHloM) -- [0:45 Node.js уже 10 лет](https://youtu.be/CUU49jjHloM?t=45) -- [5:39 Обзор новых возможностей Node.js](https://youtu.be/CUU49jjHloM?t=339) -- [18:14 Возможности для паралельного программирования на Node.js](https://youtu.be/CUU49jjHloM?t=1094) -- [20:08 Как работают thread и process в Node.js](https://youtu.be/CUU49jjHloM?t=1208) -- [20:47 Обзор последствий отсутствия изоляции в Node.js](https://youtu.be/CUU49jjHloM?t=1247) -- [20:33 Проблемы отсутствия изоляции в Node.js](https://youtu.be/CUU49jjHloM?t=1233) -- [38:27 Способы изоляции Node.js кода](https://youtu.be/CUU49jjHloM?t=2307) -- [48:24 Изоляция и кластеризации с threads в Node.js v12](https://youtu.be/CUU49jjHloM?t=2904) -- [56:59 Области применения Node.js: Локальные приложения](https://youtu.be/CUU49jjHloM?t=3419) -- [1:02:02 Области применения Node.js: Сервера](https://youtu.be/CUU49jjHloM?t=3722) -- [1:05:49 Области применения Node.js: Клиенты](https://youtu.be/CUU49jjHloM?t=3949) -- [1:08:58 Области применения Node.js: Hardware](https://youtu.be/CUU49jjHloM?t=4138) -- [1:09:28 Редкие области применения Node.js](https://youtu.be/CUU49jjHloM?t=4168) -- [1:11:55 Не подходящие области применения Node.js](https://youtu.be/CUU49jjHloM?t=4315) -- [1:13:53 Deno как экспементальная альтернатива Node.js](https://youtu.be/CUU49jjHloM?t=4433) -- [1:21:02 Обзор ссылок по теме](https://youtu.be/CUU49jjHloM?t=4862) -- [1:23:06 Ответы на вопросы](https://youtu.be/CUU49jjHloM?t=4986) +- [00:45 Node.js уже 10 лет](https://youtu.be/CUU49jjHloM?t=45) +- [05:39 Обзор новых возможностей Node.js](https://youtu.be/CUU49jjHloM?t=339) +- [18:14 Возможности для паралельного программирования на Node.js](https://youtu.be/CUU49jjHloM?t=1094) +- [20:08 Как работают thread и process в Node.js](https://youtu.be/CUU49jjHloM?t=1208) +- [20:47 Обзор последствий отсутствия изоляции в Node.js](https://youtu.be/CUU49jjHloM?t=1247) +- [20:33 Проблемы отсутствия изоляции в Node.js](https://youtu.be/CUU49jjHloM?t=1233) +- [38:27 Способы изоляции Node.js кода](https://youtu.be/CUU49jjHloM?t=2307) +- [48:24 Изоляция и кластеризации с threads в Node.js v12](https://youtu.be/CUU49jjHloM?t=2904) +- [56:59 Области применения Node.js: Локальные приложения](https://youtu.be/CUU49jjHloM?t=3419) +- [1:02:02 Области применения Node.js: Сервера](https://youtu.be/CUU49jjHloM?t=3722) +- [1:05:49 Области применения Node.js: Клиенты](https://youtu.be/CUU49jjHloM?t=3949) +- [1:08:58 Области применения Node.js: Hardware](https://youtu.be/CUU49jjHloM?t=4138) +- [1:09:28 Редкие области применения Node.js](https://youtu.be/CUU49jjHloM?t=4168) +- [1:11:55 Не подходящие области применения Node.js](https://youtu.be/CUU49jjHloM?t=4315) +- [1:13:53 Deno как экспементальная альтернатива Node.js](https://youtu.be/CUU49jjHloM?t=4433) +- [1:21:02 Обзор ссылок по теме](https://youtu.be/CUU49jjHloM?t=4862) +- [1:23:06 Ответы на вопросы](https://youtu.be/CUU49jjHloM?t=4986) ## [Асинхронное программирование в Node.js и JavaScript](https://youtu.be/hY6Z6qNYzmc) -- [5:45 Callbacks](https://youtu.be/hY6Z6qNYzmc?t=345) -- [10:00 Async.js or analogues](https://youtu.be/hY6Z6qNYzmc?t=600) -- [15:47 Events](https://youtu.be/hY6Z6qNYzmc?t=947) -- [18:00 Promise](https://youtu.be/hY6Z6qNYzmc?t=1080) -- [25:20 async/await](https://youtu.be/hY6Z6qNYzmc?t=1520) -- [27:10 Functor + Chaining + composition](https://youtu.be/hY6Z6qNYzmc?t=1630) -- [30:49 Problems of callback, async.js, Proimise, async/await](https://youtu.be/hY6Z6qNYzmc?t=1849) -- [34:00 Add timeout to any function](https://youtu.be/hY6Z6qNYzmc?t=2040) -- [36:55 Make function cancelable](https://youtu.be/hY6Z6qNYzmc?t=2215) -- [37:59 More wrappers](https://youtu.be/hY6Z6qNYzmc?t=2279) -- [39:22 Promisify and Callbackify](https://youtu.be/hY6Z6qNYzmc?t=2362) -- [48:47 Sync function to async](https://youtu.be/hY6Z6qNYzmc?t=2927) -- [41:43 Sync function to Promise](https://youtu.be/hY6Z6qNYzmc?t=2503) -- [43:17 Convertors](https://youtu.be/hY6Z6qNYzmc?t=2597) -- [43:31 Metasync](https://youtu.be/hY6Z6qNYzmc?t=2611) -- [45:26 Function composition](https://youtu.be/hY6Z6qNYzmc?t=2726) -- [47:09 Adynchronous function composition](https://youtu.be/hY6Z6qNYzmc?t=2829) -- [47:58 Flow communication like in electronics](https://youtu.be/hY6Z6qNYzmc?t=2878) -- [50:06 Collectors](https://youtu.be/hY6Z6qNYzmc?t=3006) -- [59:17 Queue](https://youtu.be/hY6Z6qNYzmc?t=3557) +- [05:45 Callbacks](https://youtu.be/hY6Z6qNYzmc?t=345) +- [10:00 Async.js or analogues](https://youtu.be/hY6Z6qNYzmc?t=600) +- [15:47 Events](https://youtu.be/hY6Z6qNYzmc?t=947) +- [18:00 Promise](https://youtu.be/hY6Z6qNYzmc?t=1080) +- [25:20 async/await](https://youtu.be/hY6Z6qNYzmc?t=1520) +- [27:10 Functor + Chaining + composition](https://youtu.be/hY6Z6qNYzmc?t=1630) +- [30:49 Problems of callback, async.js, Proimise, async/await](https://youtu.be/hY6Z6qNYzmc?t=1849) +- [34:00 Add timeout to any function](https://youtu.be/hY6Z6qNYzmc?t=2040) +- [36:55 Make function cancelable](https://youtu.be/hY6Z6qNYzmc?t=2215) +- [37:59 More wrappers](https://youtu.be/hY6Z6qNYzmc?t=2279) +- [39:22 Promisify and Callbackify](https://youtu.be/hY6Z6qNYzmc?t=2362) +- [48:47 Sync function to async](https://youtu.be/hY6Z6qNYzmc?t=2927) +- [41:43 Sync function to Promise](https://youtu.be/hY6Z6qNYzmc?t=2503) +- [43:17 Convertors](https://youtu.be/hY6Z6qNYzmc?t=2597) +- [43:31 Metasync](https://youtu.be/hY6Z6qNYzmc?t=2611) +- [45:26 Function composition](https://youtu.be/hY6Z6qNYzmc?t=2726) +- [47:09 Adynchronous function composition](https://youtu.be/hY6Z6qNYzmc?t=2829) +- [47:58 Flow communication like in electronics](https://youtu.be/hY6Z6qNYzmc?t=2878) +- [50:06 Collectors](https://youtu.be/hY6Z6qNYzmc?t=3006) +- [59:17 Queue](https://youtu.be/hY6Z6qNYzmc?t=3557) ## [Обзор встроенного Node.js API](https://youtu.be/sOkjR-N6IAs) -- [1:45 Readline](https://youtu.be/sOkjR-N6IAs?t=105) -- [2:42 Stream](https://youtu.be/sOkjR-N6IAs?t=162) -- [6:51 Buffer](https://youtu.be/sOkjR-N6IAs?t=411) -- [9:15 Child Processes](https://youtu.be/sOkjR-N6IAs?t=555) -- [12:24 Cluster](https://youtu.be/sOkjR-N6IAs?t=744) -- [16:23 Crypto](https://youtu.be/sOkjR-N6IAs?t=983) -- [17:47 DNS](https://youtu.be/sOkjR-N6IAs?t=1067) -- [19:30 Domain](https://youtu.be/sOkjR-N6IAs?t=1170) -- [22:44 Events](https://youtu.be/sOkjR-N6IAs?t=1364) -- [23:16 Errors, Timers](https://youtu.be/sOkjR-N6IAs?t=1396) -- [27:26 File System](https://youtu.be/sOkjR-N6IAs?t=1646) -- [28:56 HTTP](https://youtu.be/sOkjR-N6IAs?t=1736) -- [31:49 OS](https://youtu.be/sOkjR-N6IAs?t=1909) -- [33:38 Process](https://youtu.be/sOkjR-N6IAs?t=2018) -- [41:55 Path](https://youtu.be/sOkjR-N6IAs?t=2515) -- [43:15 TLS/SSL](https://youtu.be/sOkjR-N6IAs?t=2595) -- [44:44 URL](https://youtu.be/sOkjR-N6IAs?t=2684) -- [45:22 Util](https://youtu.be/sOkjR-N6IAs?t=2722) -- [47:00 V8/VM](https://youtu.be/sOkjR-N6IAs?t=2820) -- [49:55 Worker Threads](https://youtu.be/sOkjR-N6IAs?t=2995) -- [50:56 ZLIB](https://youtu.be/sOkjR-N6IAs?t=3056) -- [51:55 Modules](https://youtu.be/sOkjR-N6IAs?t=3115) +- [01:45 Readline](https://youtu.be/sOkjR-N6IAs?t=105) +- [02:42 Stream](https://youtu.be/sOkjR-N6IAs?t=162) +- [06:51 Buffer](https://youtu.be/sOkjR-N6IAs?t=411) +- [09:15 Child Processes](https://youtu.be/sOkjR-N6IAs?t=555) +- [12:24 Cluster](https://youtu.be/sOkjR-N6IAs?t=744) +- [16:23 Crypto](https://youtu.be/sOkjR-N6IAs?t=983) +- [17:47 DNS](https://youtu.be/sOkjR-N6IAs?t=1067) +- [19:30 Domain](https://youtu.be/sOkjR-N6IAs?t=1170) +- [22:44 Events](https://youtu.be/sOkjR-N6IAs?t=1364) +- [23:16 Errors, Timers](https://youtu.be/sOkjR-N6IAs?t=1396) +- [27:26 File System](https://youtu.be/sOkjR-N6IAs?t=1646) +- [28:56 HTTP](https://youtu.be/sOkjR-N6IAs?t=1736) +- [31:49 OS](https://youtu.be/sOkjR-N6IAs?t=1909) +- [33:38 Process](https://youtu.be/sOkjR-N6IAs?t=2018) +- [41:55 Path](https://youtu.be/sOkjR-N6IAs?t=2515) +- [43:15 TLS/SSL](https://youtu.be/sOkjR-N6IAs?t=2595) +- [44:44 URL](https://youtu.be/sOkjR-N6IAs?t=2684) +- [45:22 Util](https://youtu.be/sOkjR-N6IAs?t=2722) +- [47:00 V8/VM](https://youtu.be/sOkjR-N6IAs?t=2820) +- [49:55 Worker Threads](https://youtu.be/sOkjR-N6IAs?t=2995) +- [50:56 ZLIB](https://youtu.be/sOkjR-N6IAs?t=3056) +- [51:55 Modules](https://youtu.be/sOkjR-N6IAs?t=3115) ## [Настройка среды: Node.js, npm, git, eslint](https://youtu.be/hSyA7tcNaCE) ## [Работа с файлами, буферами и файловыми потоками в Node.js](https://youtu.be/eQGBS15vUac) -- [1:39 Работа с файлами](https://youtu.be/eQGBS15vUac?t=99) -- [35:12 Буферы](https://youtu.be/eQGBS15vUac?t=2112) -- [43:46 Файловые потоки](https://youtu.be/eQGBS15vUac?t=2626) +- [01:39 Работа с файлами](https://youtu.be/eQGBS15vUac?t=99) +- [35:12 Буферы](https://youtu.be/eQGBS15vUac?t=2112) +- [43:46 Файловые потоки](https://youtu.be/eQGBS15vUac?t=2626) ## [Наблюдение за файловой системой в Node.js](https://youtu.be/29QINR9rruQ) -- [0:32 File watch](https://youtu.be/29QINR9rruQ?t=32) -- [4:40 Folder watch](https://youtu.be/29QINR9rruQ?t=280) -- [8:40 Server](https://youtu.be/29QINR9rruQ?t=520) -- [12:55 LiveReload](https://youtu.be/29QINR9rruQ?t=775) -- [24:50 LiverReload в impress](https://youtu.be/29QINR9rruQ?t=1490) +- [00:32 File watch](https://youtu.be/29QINR9rruQ?t=32) +- [04:40 Folder watch](https://youtu.be/29QINR9rruQ?t=280) +- [08:40 Server](https://youtu.be/29QINR9rruQ?t=520) +- [12:55 LiveReload](https://youtu.be/29QINR9rruQ?t=775) +- [24:50 LiverReload в impress](https://youtu.be/29QINR9rruQ?t=1490) ## [Консоль и командная строка в JavaScript и Node.js](https://youtu.be/5aSZyKi5BmE) -- [1:20 console](https://youtu.be/5aSZyKi5BmE?t=80) -- [16:00 readline](https://youtu.be/5aSZyKi5BmE?t=960) -- [21:35 cli](https://youtu.be/5aSZyKi5BmE?t=1295) -- [31:15 делаем красивый login screen](https://youtu.be/5aSZyKi5BmE?t=1875) +- [01:20 console](https://youtu.be/5aSZyKi5BmE?t=80) +- [16:00 readline](https://youtu.be/5aSZyKi5BmE?t=960) +- [21:35 cli](https://youtu.be/5aSZyKi5BmE?t=1295) +- [31:15 делаем красивый login screen](https://youtu.be/5aSZyKi5BmE?t=1875) ## [Архитектурный подход к программированию](https://youtu.be/d_vyO2CkiOc) -- [00:00:00 Когда нужна архитектура](https://youtu.be/d_vyO2CkiOc?t=0) -- [00:06:07 Принятие решений](https://youtu.be/d_vyO2CkiOc?t=367) -- [00:09:58 Типы связывания](https://youtu.be/d_vyO2CkiOc?t=598) -- [00:20:00 Ошибки](https://youtu.be/d_vyO2CkiOc?t=1200) -- [00:27:15 Принятие решений](https://youtu.be/d_vyO2CkiOc?t=1635) -- [00:37:05 Эволюция архитектурных решений](https://youtu.be/d_vyO2CkiOc?t=2225) -- [00:58:13 Схема современной архитектуры](https://youtu.be/d_vyO2CkiOc?t=3493) -- [01:01:40 субд в браузере](https://youtu.be/d_vyO2CkiOc?t=3700) -- [01:05:20 Альтернативные варианты](https://youtu.be/d_vyO2CkiOc?t=3920) -- [01:12:20 Как на самом деле](https://youtu.be/d_vyO2CkiOc?t=4340) -- [01:13:45 Архитектура мечты](https://youtu.be/d_vyO2CkiOc?t=4425) -- [01:16:45 Современные возможности и требования ](https://youtu.be/d_vyO2CkiOc?t=4605) -- [01:25:20 Топологии](https://youtu.be/d_vyO2CkiOc?t=5120) -- [01:30:45 Итог](https://youtu.be/d_vyO2CkiOc?t=5445) +- [00:00:00 Когда нужна архитектура](https://youtu.be/d_vyO2CkiOc?t=0) +- [00:06:07 Принятие решений](https://youtu.be/d_vyO2CkiOc?t=367) +- [00:09:58 Типы связывания](https://youtu.be/d_vyO2CkiOc?t=598) +- [00:20:00 Ошибки](https://youtu.be/d_vyO2CkiOc?t=1200) +- [00:27:15 Принятие решений](https://youtu.be/d_vyO2CkiOc?t=1635) +- [00:37:05 Эволюция архитектурных решений](https://youtu.be/d_vyO2CkiOc?t=2225) +- [00:58:13 Схема современной архитектуры](https://youtu.be/d_vyO2CkiOc?t=3493) +- [01:01:40 субд в браузере](https://youtu.be/d_vyO2CkiOc?t=3700) +- [01:05:20 Альтернативные варианты](https://youtu.be/d_vyO2CkiOc?t=3920) +- [01:12:20 Как на самом деле](https://youtu.be/d_vyO2CkiOc?t=4340) +- [01:13:45 Архитектура мечты](https://youtu.be/d_vyO2CkiOc?t=4425) +- [01:16:45 Современные возможности и требования](https://youtu.be/d_vyO2CkiOc?t=4605) +- [01:25:20 Топологии](https://youtu.be/d_vyO2CkiOc?t=5120) +- [01:30:45 Итог](https://youtu.be/d_vyO2CkiOc?t=5445) ## [Модули, слои, структура проекта, песочницы в JavaScript и Node.js](https://youtu.be/O7A9chb573E) -- [1:00 Пример структуры приложения](https://youtu.be/O7A9chb573E?t=60) -- [14:23 Примеры плохо и хорошо структурированного кода ](https://youtu.be/O7A9chb573E?t=863) -- [25:46 Песочницы](https://youtu.be/O7A9chb573E?t=1546) +- [01:00 Пример структуры приложения](https://youtu.be/O7A9chb573E?t=60) +- [14:23 Примеры плохо и хорошо структурированного кода](https://youtu.be/O7A9chb573E?t=863) +- [25:46 Песочницы](https://youtu.be/O7A9chb573E?t=1546) ## [Инверсия управления и внедрение зависимостей в Node.js](https://youtu.be/Fz86Fdjz-LM) @@ -148,10 +148,10 @@ ## [Клиент-сервер на Node.js TCP и UDP, DNS](https://youtu.be/bHn-wTlTTR0) -- [2:25 TCP, простой пример клиент/сервер](https://youtu.be/bHn-wTlTTR0?t=145) -- [20:20 TCP, пример сложнее](https://youtu.be/bHn-wTlTTR0?t=1220) -- [29:26 UDP](https://youtu.be/bHn-wTlTTR0?t=1766) -- [35:14 DNS](https://youtu.be/bHn-wTlTTR0?t=2114) +- [02:25 TCP, простой пример клиент/сервер](https://youtu.be/bHn-wTlTTR0?t=145) +- [20:20 TCP, пример сложнее](https://youtu.be/bHn-wTlTTR0?t=1220) +- [29:26 UDP](https://youtu.be/bHn-wTlTTR0?t=1766) +- [35:14 DNS](https://youtu.be/bHn-wTlTTR0?t=2114) ## [HTTP сервер на Node.js (routing, cluster, IP sticky)](https://youtu.be/7Ufxj0oTaUo) @@ -185,21 +185,21 @@ ## [Atomics, SharedArrayBuffer, worker_threads в Node.js](https://youtu.be/zLm8pnbxSII) -- [00:00 - початок ](https://youtu.be/zLm8pnbxSII?t=0) -- [03:53 - про worker_threads](https://youtu.be/zLm8pnbxSII?t=233) -- [12:20 - сепарація на worker i master](https://youtu.be/zLm8pnbxSII?t=740) -- [14:57 - як використовувати worker ](https://youtu.be/zLm8pnbxSII?t=897) -- [25:00 - про Atomics](https://youtu.be/zLm8pnbxSII?t=1500) -- [41:00 - Atomics i worker_threads робота в парі](https://youtu.be/zLm8pnbxSII?t=2460) +- [00:00 початок](https://youtu.be/zLm8pnbxSII?t=0) +- [03:53 про worker_threads](https://youtu.be/zLm8pnbxSII?t=233) +- [12:20 сепарація на worker i master](https://youtu.be/zLm8pnbxSII?t=740) +- [14:57 як використовувати worker](https://youtu.be/zLm8pnbxSII?t=897) +- [25:00 про Atomics](https://youtu.be/zLm8pnbxSII?t=1500) +- [41:00 Atomics i worker_threads робота в парі](https://youtu.be/zLm8pnbxSII?t=2460) ## [Семафоры и мьютексы в JavaScript и Node.js](https://youtu.be/JNLrITevhRI) -- [00:00 - теорія](https://youtu.be/JNLrITevhRI?t=0) -- [8:55 - приклад worker_threads без семафора ](https://youtu.be/JNLrITevhRI?t=535) -- [15:29 - про семафор, семафор бінарний, семафор з лічильником і Atomics ](https://youtu.be/JNLrITevhRI?t=929) -- [53:52 - мютекси та різниця між семафором ](https://youtu.be/JNLrITevhRI?t=3232) -- [58:28 - про deadlock](https://youtu.be/JNLrITevhRI?t=3508) -- [1:02:12 - про livelock і стан гонки](https://youtu.be/JNLrITevhRI?t=3732) +- [00:00 теорія](https://youtu.be/JNLrITevhRI?t=0) +- [08:55 приклад worker_threads без семафора](https://youtu.be/JNLrITevhRI?t=535) +- [15:29 про семафор, семафор бінарний, семафор з лічильником і Atomics](https://youtu.be/JNLrITevhRI?t=929) +- [53:52 мютекси та різниця між семафором](https://youtu.be/JNLrITevhRI?t=3232) +- [58:28 про deadlock](https://youtu.be/JNLrITevhRI?t=3508) +- [1:02:12 про livelock і стан гонки](https://youtu.be/JNLrITevhRI?t=3732) ## [Разделяемая память в многопоточном Node.js. Тимур Шемсединов. JS Fest 2019 Spring](https://youtu.be/KNsm_iIQt7U) @@ -221,14 +221,14 @@ ## [GRASP принципы с адаптацией для JavaScript и Node.js](https://youtu.be/ExauFjYV_lQ) -- [5:03 Information Expert](https://youtu.be/ExauFjYV_lQ?t=303) -- [13:06 Creator](https://youtu.be/ExauFjYV_lQ?t=786) -- [18:15 Cohesion & Coupling](https://youtu.be/ExauFjYV_lQ?t=1095) -- [21:33 Controller](https://youtu.be/ExauFjYV_lQ?t=1293) -- [24:58 Polymorphism](https://youtu.be/ExauFjYV_lQ?t=1498) -- [31:55 Indirection](https://youtu.be/ExauFjYV_lQ?t=1915) -- [34:34 Pure Fabrication](https://youtu.be/ExauFjYV_lQ?t=2074) -- [38:36 Protected Variations](https://youtu.be/ExauFjYV_lQ?t=2316) +- [05:03 Information Expert](https://youtu.be/ExauFjYV_lQ?t=303) +- [13:06 Creator](https://youtu.be/ExauFjYV_lQ?t=786) +- [18:15 Cohesion & Coupling](https://youtu.be/ExauFjYV_lQ?t=1095) +- [21:33 Controller](https://youtu.be/ExauFjYV_lQ?t=1293) +- [24:58 Polymorphism](https://youtu.be/ExauFjYV_lQ?t=1498) +- [31:55 Indirection](https://youtu.be/ExauFjYV_lQ?t=1915) +- [34:34 Pure Fabrication](https://youtu.be/ExauFjYV_lQ?t=2074) +- [38:36 Protected Variations](https://youtu.be/ExauFjYV_lQ?t=2316) ## [GRASP: принцип информационный эксперт с адаптацией для JavaScript и Node.js](https://youtu.be/cCHL329_As0) @@ -242,28 +242,28 @@ ## [Node.js модули: ECMA, Common.js, Module API](https://youtu.be/CJr2vS3hjMU) -- [1:02 export модулей](https://youtu.be/CJr2vS3hjMU?t=62) -- [3:00 require модулей](https://youtu.be/CJr2vS3hjMU?t=180) -- [5:35 require-resolve модулей](https://youtu.be/CJr2vS3hjMU?t=335) -- [12:15 cache](https://youtu.be/CJr2vS3hjMU?t=735) -- [18:38 немного об singleton](https://youtu.be/CJr2vS3hjMU?t=1118) -- [19:53 модуль global](https://youtu.be/CJr2vS3hjMU?t=1193) -- [20:43 пример с mixin-ами](https://youtu.be/CJr2vS3hjMU?t=1243) -- [25:13 пример ecma скрипт модуля - export](https://youtu.be/CJr2vS3hjMU?t=1513) -- [26:10 пример ecma скрипт модуля - import](https://youtu.be/CJr2vS3hjMU?t=1570) -- [27:20 пример динамического импорта](https://youtu.be/CJr2vS3hjMU?t=1640) -- [31:10 загрузка ф-ии createRequire](https://youtu.be/CJr2vS3hjMU?t=1870) -- [41:00 подгрузка module через require](https://youtu.be/CJr2vS3hjMU?t=2460) -- [43:40 подгрузка module через import](https://youtu.be/CJr2vS3hjMU?t=2620) +- [01:02 export модулей](https://youtu.be/CJr2vS3hjMU?t=62) +- [03:00 require модулей](https://youtu.be/CJr2vS3hjMU?t=180) +- [05:35 require-resolve модулей](https://youtu.be/CJr2vS3hjMU?t=335) +- [12:15 cache](https://youtu.be/CJr2vS3hjMU?t=735) +- [18:38 немного об singleton](https://youtu.be/CJr2vS3hjMU?t=1118) +- [19:53 модуль global](https://youtu.be/CJr2vS3hjMU?t=1193) +- [20:43 пример с mixin-ами](https://youtu.be/CJr2vS3hjMU?t=1243) +- [25:13 пример ecma скрипт модуля - export](https://youtu.be/CJr2vS3hjMU?t=1513) +- [26:10 пример ecma скрипт модуля - import](https://youtu.be/CJr2vS3hjMU?t=1570) +- [27:20 пример динамического импорта](https://youtu.be/CJr2vS3hjMU?t=1640) +- [31:10 загрузка ф-ии createRequire](https://youtu.be/CJr2vS3hjMU?t=1870) +- [41:00 подгрузка module через require](https://youtu.be/CJr2vS3hjMU?t=2460) +- [43:40 подгрузка module через import](https://youtu.be/CJr2vS3hjMU?t=2620) ## [Node.js модули и пакеты формата ECMA и CommonJS, использование package.json и node_modules](https://youtu.be/31sX_3IbXs4) -- [1:00 подгрузка пакетов package](https://youtu.be/31sX_3IbXs4?t=60) -- [5:40 загрузка пакетов](https://youtu.be/31sX_3IbXs4?t=340) -- [9:00 подгрузка файлов нового формата .mjs](https://youtu.be/31sX_3IbXs4?t=540) -- [10:47 импорт ecma скрипт модулей с .js файлов](https://youtu.be/31sX_3IbXs4?t=647) -- [13:20 export пакетов](https://youtu.be/31sX_3IbXs4?t=800) -- [22:30 сравнение cache-й модулей](https://youtu.be/31sX_3IbXs4?t=1350) +- [01:00 подгрузка пакетов package](https://youtu.be/31sX_3IbXs4?t=60) +- [05:40 загрузка пакетов](https://youtu.be/31sX_3IbXs4?t=340) +- [09:00 подгрузка файлов нового формата .mjs](https://youtu.be/31sX_3IbXs4?t=540) +- [10:47 импорт ecma скрипт модулей с .js файлов](https://youtu.be/31sX_3IbXs4?t=647) +- [13:20 export пакетов](https://youtu.be/31sX_3IbXs4?t=800) +- [22:30 сравнение cache-й модулей](https://youtu.be/31sX_3IbXs4?t=1350) ## [Асинхронный пул для worker thread pool в Node.js](https://youtu.be/Jj5KZRq4wYI) From c2c8065a5c39dcee5643e084128c60830d84692f Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 4 Aug 2022 18:37:30 +0300 Subject: [PATCH 011/217] Add links --- Courses/Asynchronous.md | 2 ++ Courses/NodeJS.md | 2 ++ README.md | 8 ++++---- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Courses/Asynchronous.md b/Courses/Asynchronous.md index 29268ff..b4ad541 100644 --- a/Courses/Asynchronous.md +++ b/Courses/Asynchronous.md @@ -2,6 +2,8 @@ Объем материала: 24 лекции, 27 репозиториев с примерами кода. +[Таймкоды и подробное оглавление для части лекций](Asynchronous-timecodes.md) + ## Видео-лекции - [Асинхронное программирование (обзор)](https://youtu.be/hY6Z6qNYzmc) diff --git a/Courses/NodeJS.md b/Courses/NodeJS.md index 74a737e..e5bd520 100644 --- a/Courses/NodeJS.md +++ b/Courses/NodeJS.md @@ -4,6 +4,8 @@ Перед основной частью курса по Node.js нужно сначала освоить хоть частично курс по асинхронному программированию: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md +[Таймкоды и подробное оглавление для части лекций](NodeJS-timecodes.md) + ## Доклады и выступления - [Node.js Middleware – никогда больше!](https://youtu.be/RS8x73z4csI) diff --git a/README.md b/README.md index b8d0c9a..7865dac 100644 --- a/README.md +++ b/README.md @@ -16,10 +16,10 @@ ## Отдельные курсы -- [Асинхронное программирование](Courses/Asynchronous.md) - (есть 97% примеров кода и видео-лекции) -- [Технологический стек Node.js](Courses/NodeJS.md) - (есть 95% кода и видео-лекций) +- [Асинхронное программирование](Courses/Asynchronous.md) [(с таймкодами)](Courses/Asynchronous-timecodes.md) + (есть 98% примеров кода и видео-лекции) +- [Технологический стек Node.js](Courses/NodeJS.md) [(с таймкодами)](Courses/NodeJS-timecodes.md) + (есть 97% кода и видео-лекций) - [Технологический стек Metarhia](Courses/Metarhia.md) (есть 5% примеров и видео-лекций) - [Шаблоны проектирования](Courses/Patterns.md) From 68cf4daece8419c91b4e3fbbdf1e3725a04837ab Mon Sep 17 00:00:00 2001 From: Anton Telichenko Date: Sat, 6 Aug 2022 10:05:53 +0300 Subject: [PATCH 012/217] Update Fundamentals-timecodes.md (#79) --- Courses/Fundamentals-timecodes.md | 1083 +++++++++++++++-------------- 1 file changed, 575 insertions(+), 508 deletions(-) diff --git a/Courses/Fundamentals-timecodes.md b/Courses/Fundamentals-timecodes.md index 4c93fe1..5dd2d4e 100644 --- a/Courses/Fundamentals-timecodes.md +++ b/Courses/Fundamentals-timecodes.md @@ -4,38 +4,39 @@ ## [Карта специальности инженер-программист](https://youtu.be/SE5aXH-yf0I) -- [00:00:00 Введение](https://youtu.be/SE5aXH-yf0I?t=0) -- [00:02:21 Что такое программирование? ](https://youtu.be/SE5aXH-yf0I?t=141) -- [00:05:55 Связанные понятия ](https://youtu.be/SE5aXH-yf0I?t=355) -- [00:06:43 Основы программной инженерии ](https://youtu.be/SE5aXH-yf0I?t=403) -- [00:11:42 Предсказуемые вычисления ](https://youtu.be/SE5aXH-yf0I?t=702) -- [00:14:36 Моделирование](https://youtu.be/SE5aXH-yf0I?t=876) -- [00:14:52 Классификация моделей ](https://youtu.be/SE5aXH-yf0I?t=892) -- [00:17:33 Схемы моделирования ](https://youtu.be/SE5aXH-yf0I?t=1053) -- [00:22:23 Парадигмы программирования ](https://youtu.be/SE5aXH-yf0I?t=1343) -- [00:23:16 Императивное и функциональное программирование ](https://youtu.be/SE5aXH-yf0I?t=1396) -- [00:28:25 Неструктурное программирование ](https://youtu.be/SE5aXH-yf0I?t=1705) -- [00:30:01 Структурное программирование ](https://youtu.be/SE5aXH-yf0I?t=1801) -- [00:30:46 Процедурное программирование ](https://youtu.be/SE5aXH-yf0I?t=1846) -- [00:31:18 Объектно-ориетированное программирование ](https://youtu.be/SE5aXH-yf0I?t=1878) -- [00:31:48 Прототипно-ориетированное программирование ](https://youtu.be/SE5aXH-yf0I?t=1908) -- [00:32:14 Функциональное программирование ](https://youtu.be/SE5aXH-yf0I?t=1934) -- [00:32:48 Узконаправленное программирование](https://youtu.be/SE5aXH-yf0I?t=1968) -- [00:33:44 Техники и технологии](https://youtu.be/SE5aXH-yf0I?t=2024) -- [00:36:55 Реактивное программирование и Событийно-ориентированное](https://youtu.be/SE5aXH-yf0I?t=2215) -- [00:38:16 Функционально-реактивное программирование ](https://youtu.be/SE5aXH-yf0I?t=2296) -- [00:38:39 Модель акторов](https://youtu.be/SE5aXH-yf0I?t=2319) -- [00:39:49 Метапрограммирование ](https://youtu.be/SE5aXH-yf0I?t=2389) -- [00:43:09 Системное и прикладное программирование](https://youtu.be/SE5aXH-yf0I?t=2589) -- [00:44:25 Задачи программной инженерии ](https://youtu.be/SE5aXH-yf0I?t=2665) -- [00:50:46 Как преодолеть сложность ](https://youtu.be/SE5aXH-yf0I?t=3046) -- [00:52:16 Данные и логика ](https://youtu.be/SE5aXH-yf0I?t=3136) -- [00:57:49 Разработка программного обеспечения ](https://youtu.be/SE5aXH-yf0I?t=3469) -- [01:04:50 Подход к разработке ](https://youtu.be/SE5aXH-yf0I?t=3890) -- [01:06:04 Гибридная разработка ](https://youtu.be/SE5aXH-yf0I?t=3964) -- [01:07:10 Принцип NIH ](https://youtu.be/SE5aXH-yf0I?t=4030) -- [01:09:12 Классификация приложений по месту запуска](https://youtu.be/SE5aXH-yf0I?t=4152) -- [01:12:17 Схемы и примеры](https://youtu.be/SE5aXH-yf0I?t=4337) +- [00:00:00 Введение](https://youtu.be/SE5aXH-yf0I?t=0) +- [00:02:21 Что такое программирование?](https://youtu.be/SE5aXH-yf0I?t=141) +- [00:05:55 Связанные понятия](https://youtu.be/SE5aXH-yf0I?t=355) +- [00:06:43 Основы программной инженерии](https://youtu.be/SE5aXH-yf0I?t=403) +- [00:11:42 Предсказуемые вычисления](https://youtu.be/SE5aXH-yf0I?t=702) +- [00:14:36 Моделирование](https://youtu.be/SE5aXH-yf0I?t=876) +- [00:14:52 Классификация моделей](https://youtu.be/SE5aXH-yf0I?t=892) +- [00:17:33 Схемы моделирования](https://youtu.be/SE5aXH-yf0I?t=1053) +- [00:22:23 Парадигмы программирования](https://youtu.be/SE5aXH-yf0I?t=1343) +- [00:23:16 Императивное и функциональное программирование](https://youtu.be/SE5aXH-yf0I?t=1396) +- [00:28:25 Неструктурное программирование](https://youtu.be/SE5aXH-yf0I?t=1705) +- [00:30:01 Структурное программирование](https://youtu.be/SE5aXH-yf0I?t=1801) +- [00:30:46 Процедурное программирование](https://youtu.be/SE5aXH-yf0I?t=1846) +- [00:31:18 Объектно-ориетированное программирование](https://youtu.be/SE5aXH-yf0I?t=1878) +- [00:31:48 Прототипно-ориетированное программирование](https://youtu.be/SE5aXH-yf0I?t=1908) +- [00:32:14 Функциональное программирование](https://youtu.be/SE5aXH-yf0I?t=1934) +- [00:32:48 Узконаправленное программирование](https://youtu.be/SE5aXH-yf0I?t=1968) +- [00:33:44 Техники и технологии](https://youtu.be/SE5aXH-yf0I?t=2024) +- [00:36:55 Реактивное программирование и Событийно-ориентированное](https://youtu.be/SE5aXH-yf0I?t=2215) +- [00:38:16 Функционально-реактивное программирование](https://youtu.be/SE5aXH-yf0I?t=2296) +- [00:38:39 Модель акторов](https://youtu.be/SE5aXH-yf0I?t=2319) +- [00:39:49 Метапрограммирование](https://youtu.be/SE5aXH-yf0I?t=2389) +- [00:43:09 Системное и прикладное программирование](https://youtu.be/SE5aXH-yf0I?t=2589) +- [00:44:25 Задачи программной инженерии](https://youtu.be/SE5aXH-yf0I?t=2665) +- [00:50:46 Как преодолеть сложность](https://youtu.be/SE5aXH-yf0I?t=3046) +- [00:52:16 Данные и логика](https://youtu.be/SE5aXH-yf0I?t=3136) +- [00:57:49 Разработка программного обеспечения](https://youtu.be/SE5aXH-yf0I?t=3469) +- [01:04:50 Подход к разработке](https://youtu.be/SE5aXH-yf0I?t=3890) +- [01:06:04 Гибридная разработка](https://youtu.be/SE5aXH-yf0I?t=3964) +- [01:07:10 Принцип NIH](https://youtu.be/SE5aXH-yf0I?t=4030) +- [01:09:12 Классификация приложений по месту запуска](https://youtu.be/SE5aXH-yf0I?t=4152) +- [01:12:17 Схемы и примеры](https://youtu.be/SE5aXH-yf0I?t=4337) + ## [Введение в программирование (1 часть)](https://youtu.be/5Gt61EX6HZ4) - [0:00:02 лекция о базовых понятиях для начинающих](https://youtu.be/5Gt61EX6HZ4?t=2) @@ -44,7 +45,9 @@ - [0:05:45 инструкция или оператор / Statement](https://youtu.be/5Gt61EX6HZ4?t=345) - [0:07:23 синтаксис / Syntax](https://youtu.be/5Gt61EX6HZ4?t=443) - [0:09:21 почти все группы операторов / Statements](https://youtu.be/5Gt61EX6HZ4?t=561) -- [0:13:27 операция 0:14:09 команда 0:15:03 директива](https://youtu.be/5Gt61EX6HZ4?t=807) +- [0:13:27 операция](https://youtu.be/5Gt61EX6HZ4?t=807) +- [0:14:09 команда](https://youtu.be/5Gt61EX6HZ4?t=849) +- [0:15:03 директива](https://youtu.be/5Gt61EX6HZ4?t=903) - [0:16:59 выражение / Expression](https://youtu.be/5Gt61EX6HZ4?t=1019) - [0:20:53 значение / Value](https://youtu.be/5Gt61EX6HZ4?t=1253) - [0:22:28 тип / Type](https://youtu.be/5Gt61EX6HZ4?t=1348) @@ -56,8 +59,8 @@ - [0:40:08 присвоение / Assignment](https://youtu.be/5Gt61EX6HZ4?t=2408) - [0:41:29 константа / Constant](https://youtu.be/5Gt61EX6HZ4?t=2489) - [0:43:16 структурные типы / Composed types](https://youtu.be/5Gt61EX6HZ4?t=2596) -- [0:44:03 флаг / Flag](https://www.youtube.com/watch?v=5Gt61EX6HZ4&t=2643s) -- [0:45:09 перечисляемый тип](https://youtu.be/5Gt61EX6HZ4?t=2643) +- [0:44:03 флаг / Flag](https://youtu.be/5Gt61EX6HZ4?t=2643) +- [0:45:09 перечисляемый тип](https://youtu.be/5Gt61EX6HZ4?t=2709) - [0:46:02 алгоритм / Algorithm](https://youtu.be/5Gt61EX6HZ4?t=2762) - [0:47:40 программа / Program](https://youtu.be/5Gt61EX6HZ4?t=2860) - [0:49:01 инженерия / Engineering](https://youtu.be/5Gt61EX6HZ4?t=2941) @@ -71,11 +74,12 @@ - [1:05:18 функция / Function](https://youtu.be/5Gt61EX6HZ4?t=3918) - [1:08:06 сигнатура функции / Function signature](https://youtu.be/5Gt61EX6HZ4?t=4086) - [1:09:16 метод / Method](https://youtu.be/5Gt61EX6HZ4?t=4156) -- [1:10:37 цикл / Loop](https://www.youtube.com/watch?v=5Gt61EX6HZ4&t=4237s) -- [1:10:52 итерирование](https://www.youtube.com/watch?v=5Gt61EX6HZ4&t=4252s) -- [1:11:40 функциональное программирование](https://youtu.be/5Gt61EX6HZ4?t=4237) +- [1:10:37 цикл / Loop](https://youtu.be/5Gt61EX6HZ4?t=4237) +- [1:10:52 итерирование](https://youtu.be/5Gt61EX6HZ4?t=4252) +- [1:11:40 функциональное программирование](https://youtu.be/5Gt61EX6HZ4?t=4300) - [1:13:05 условие / Conditional statements / ветвление](https://youtu.be/5Gt61EX6HZ4?t=4385) - [1:14:54 парадигма программирования / Programming paradigm](https://youtu.be/5Gt61EX6HZ4?t=4494) + ## [Семинар: Обсуждение плана и материалов курса «Основы программирования»](https://youtu.be/bQMTbRWrteU) - [0:15 - вопрос по операционным системам](https://youtu.be/bQMTbRWrteU?t=15) @@ -97,83 +101,97 @@ - [29:20 - как посещать старшую группу](https://youtu.be/bQMTbRWrteU?t=1760) - [31:45 - об основах вёрстки и популярных фреймворках](https://youtu.be/bQMTbRWrteU?t=1905) - [33:03 - обязательно ли использовать фреймворки](https://youtu.be/bQMTbRWrteU?t=1983) -- [36:15 - почему столь немногим удается сдать экзамен](https://youtu.be/bQMTbRWrteU?t=2175) +- [36:15 - почему столь немногим удаётся сдать экзамен](https://youtu.be/bQMTbRWrteU?t=2175) - [36:50 - проверка задач для допуска к экзамену и их уровень сложности](https://youtu.be/bQMTbRWrteU?t=2210) -- [37:55 - теоретические вопросы на экзамене, пример](https://youtu.be/bQMTbRWrteU?t=2275) +- [37:55 - теорeтические вопросы на экзамене, пример](https://youtu.be/bQMTbRWrteU?t=2275) - [39:35 - знание математики](https://youtu.be/bQMTbRWrteU?t=2375) - [43:10 - сложные вопросы CS в курсе](https://youtu.be/bQMTbRWrteU?t=2590) - [46:00 - как происходит проверка задач для допуска к экзамену](https://youtu.be/bQMTbRWrteU?t=2760) + ## [Настройка среды: Node.js, npm, git, eslint](https://youtu.be/hSyA7tcNaCE) + ## [Базовый синтаксис JavaScript](https://youtu.be/xJn3k1f4BiM) -- [00:00:00 Введение](https://youtu.be/xJn3k1f4BiM?t=0) -- [00:03:02 Идентификаторы (identifiers: const, let, arguments, object property)](https://youtu.be/xJn3k1f4BiM?t=182) -- [00:14:41 Циклы (loops)](https://youtu.be/xJn3k1f4BiM?t=881) -- [00:22:10 Функции (functions)](https://youtu.be/xJn3k1f4BiM?t=1330) -- [00:30:35 Объекты (objects) ](https://youtu.be/xJn3k1f4BiM?t=1835) -- [00:33:34 Итерирование по массиву ( for ( ... of ... { } )](https://youtu.be/xJn3k1f4BiM?t=2014) -- [00:39:01 Итерирование по объекту ( for ( ... in ... { } )](https://youtu.be/xJn3k1f4BiM?t=2341) -- [00:42:28 Синтаксис простого кода](https://youtu.be/xJn3k1f4BiM?t=2548) -- [00:55:21 Синтаксис функции](https://youtu.be/xJn3k1f4BiM?t=3321) -- [01:05:38 Синтаксис класса](https://youtu.be/xJn3k1f4BiM?t=3938) -- [01:09:10 Синтаксис расширения класса с помощью функции](https://youtu.be/xJn3k1f4BiM?t=4150) -- [01:14:59 Идентификаторы в виде символов unicode](https://youtu.be/xJn3k1f4BiM?t=4499) -- [01:17:15 Синтаксис комментариев](https://youtu.be/xJn3k1f4BiM?t=4635) -- [01:18:13 Способы объявления переменных ](https://youtu.be/xJn3k1f4BiM?t=4693) -- [01:18:24 Скалярные типы переменных (string, number, boolean)](https://youtu.be/xJn3k1f4BiM?t=4704) -- [01:19:12 Структурные/ссылочные типы переменных (function, array, object)](https://youtu.be/xJn3k1f4BiM?t=4752) +- [00:00:00 Введение](https://youtu.be/xJn3k1f4BiM?t=0) +- [00:03:02 Идентификаторы (identifiers: const, let, arguments, object property)](https://youtu.be/xJn3k1f4BiM?t=182) +- [00:14:41 Циклы (loops)](https://youtu.be/xJn3k1f4BiM?t=881) +- [00:22:10 Функции (functions)](https://youtu.be/xJn3k1f4BiM?t=1330) +- [00:30:35 Объекты (objects)](https://youtu.be/xJn3k1f4BiM?t=1835) +- [00:33:34 Итерирование по массиву ( for ( ... of ... { } )](https://youtu.be/xJn3k1f4BiM?t=2014) +- [00:39:01 Итерирование по объекту ( for ( ... in ... { } )](https://youtu.be/xJn3k1f4BiM?t=2341) +- [00:42:28 Синтаксис простого кода](https://youtu.be/xJn3k1f4BiM?t=2548) +- [00:55:21 Синтаксис функции](https://youtu.be/xJn3k1f4BiM?t=3321) +- [01:05:38 Синтаксис класса](https://youtu.be/xJn3k1f4BiM?t=3938) +- [01:09:10 Синтаксис расширения класса с помощью функции](https://youtu.be/xJn3k1f4BiM?t=4150) +- [01:14:59 Идентификаторы в виде символов unicode](https://youtu.be/xJn3k1f4BiM?t=4499) +- [01:17:15 Синтаксис комментариев](https://youtu.be/xJn3k1f4BiM?t=4635) +- [01:18:13 Способы объявления переменных](https://youtu.be/xJn3k1f4BiM?t=4693) +- [01:18:24 Скалярные типы переменных (string, number, boolean)](https://youtu.be/xJn3k1f4BiM?t=4704) +- [01:19:12 Структурные/ссылочные типы переменных (function, array, object)](https://youtu.be/xJn3k1f4BiM?t=4752) + ## [Базовый синтаксис JavaScript, продолжение](https://youtu.be/qa-XleqA0JU) -- [00:01:34 Number (integer / float)](https://youtu.be/qa-XleqA0JU?t=94) -- [00:02:11 String ](https://youtu.be/qa-XleqA0JU?t=131) -- [00:02:15 Boolean](https://youtu.be/qa-XleqA0JU?t=135) -- [00:02:16 Object](https://youtu.be/qa-XleqA0JU?t=136) -- [00:03:08 Array](https://youtu.be/qa-XleqA0JU?t=188) -- [00:04:20 Метод array.push](https://youtu.be/qa-XleqA0JU?t=260) -- [00:04:31 Метод array.unshift](https://youtu.be/qa-XleqA0JU?t=271) -- [00:04:50 Метод array.shift](https://youtu.be/qa-XleqA0JU?t=290) -- [00:05:17 Метод array.pop](https://youtu.be/qa-XleqA0JU?t=317) -- [00:05:55 Оператор typeof](https://youtu.be/qa-XleqA0JU?t=355) -- [00:08:33 Метод Array.isArray](https://youtu.be/qa-XleqA0JU?t=513) -- [00:10:06 Оператор instanceof](https://youtu.be/qa-XleqA0JU?t=606) -- [00:10:48 Undefined](https://youtu.be/qa-XleqA0JU?t=648) -- [00:11:12 Null](https://youtu.be/qa-XleqA0JU?t=672) -- [00:11:55 NaN](https://youtu.be/qa-XleqA0JU?t=715) -- [00:14:18 Infinity](https://youtu.be/qa-XleqA0JU?t=858) -- [00:14:48 Тернарный оператор](https://youtu.be/qa-XleqA0JU?t=888) -- [00:16:15 Функция paseInt](https://youtu.be/qa-XleqA0JU?t=975) -- [00:24:23 Функция paseFloat](https://youtu.be/qa-XleqA0JU?t=1463) -- [00:27:15 Удаление переменных ](https://youtu.be/qa-XleqA0JU?t=1635) -- [00:33:25 Побитовые операторы (Bitwise operators)](https://youtu.be/qa-XleqA0JU?t=2005) -- [00:34:38 Побитовые операции](https://youtu.be/qa-XleqA0JU?t=2078) -- [00:44:30 BigInt](https://youtu.be/qa-XleqA0JU?t=2670) -- [00:56:30 Операторы сравнения ](https://youtu.be/qa-XleqA0JU?t=3390) -- [01:01:20 Очередность операторов (Operator precedence)](https://youtu.be/qa-XleqA0JU?t=3680) -- [01:13:25 Оператор Switch](https://youtu.be/qa-XleqA0JU?t=4405) +- [00:01:34 Number (integer / float)](https://youtu.be/qa-XleqA0JU?t=94) +- [00:02:11 String](https://youtu.be/qa-XleqA0JU?t=131) +- [00:02:15 Boolean](https://youtu.be/qa-XleqA0JU?t=135) +- [00:02:16 Object](https://youtu.be/qa-XleqA0JU?t=136) +- [00:03:08 Array](https://youtu.be/qa-XleqA0JU?t=188) +- [00:04:20 Метод array.push](https://youtu.be/qa-XleqA0JU?t=260) +- [00:04:31 Метод array.unshift](https://youtu.be/qa-XleqA0JU?t=271) +- [00:04:50 Метод array.shift](https://youtu.be/qa-XleqA0JU?t=290) +- [00:05:17 Метод array.pop](https://youtu.be/qa-XleqA0JU?t=317) +- [00:05:55 Оператор typeof](https://youtu.be/qa-XleqA0JU?t=355) +- [00:08:33 Метод Array.isArray](https://youtu.be/qa-XleqA0JU?t=513) +- [00:10:06 Оператор instanceof](https://youtu.be/qa-XleqA0JU?t=606) +- [00:10:48 Undefined](https://youtu.be/qa-XleqA0JU?t=648) +- [00:11:12 Null](https://youtu.be/qa-XleqA0JU?t=672) +- [00:11:55 NaN](https://youtu.be/qa-XleqA0JU?t=715) +- [00:14:18 Infinity](https://youtu.be/qa-XleqA0JU?t=858) +- [00:14:48 Тернарный оператор](https://youtu.be/qa-XleqA0JU?t=888) +- [00:16:15 Функция paseInt](https://youtu.be/qa-XleqA0JU?t=975) +- [00:24:23 Функция paseFloat](https://youtu.be/qa-XleqA0JU?t=1463) +- [00:27:15 Удаление переменных](https://youtu.be/qa-XleqA0JU?t=1635) +- [00:33:25 Побитовые операторы (Bitwise operators)](https://youtu.be/qa-XleqA0JU?t=2005) +- [00:34:38 Побитовые операции](https://youtu.be/qa-XleqA0JU?t=2078) +- [00:44:30 BigInt](https://youtu.be/qa-XleqA0JU?t=2670) +- [00:56:30 Операторы сравнения](https://youtu.be/qa-XleqA0JU?t=3390) +- [01:01:20 Очередность операторов (Operator precedence)](https://youtu.be/qa-XleqA0JU?t=3680) +- [01:13:25 Оператор Switch](https://youtu.be/qa-XleqA0JU?t=4405) ## [Семинар: Базовый синтаксис языка JavaScript](https://youtu.be/PGqjTXQe_qw) + ## [Семинар: автоматическая проверка лабораторных работ](https://youtu.be/M4KpG0LEAyA) + ## [Введение в программирование (2 часть)](https://youtu.be/PzlLXQ3RaDs) - [0:00:01 введение](https://youtu.be/PzlLXQ3RaDs?t=1) - [0:01:45 процедура или подпрограмма / Procedure or Subroutine](https://youtu.be/PzlLXQ3RaDs?t=105) - [0:06:05 функция / Function](https://youtu.be/PzlLXQ3RaDs?t=365) -- [0:09:27 стек вызовов / Call Stack 0:18:26 Mixed Solution 0:21:42 принцип LIFO](https://youtu.be/PzlLXQ3RaDs?t=567) +- [0:09:27 стек вызовов / Call Stack](https://youtu.be/PzlLXQ3RaDs?t=567) +- [0:18:26 Mixed Solution](https://youtu.be/PzlLXQ3RaDs?t=1106) +- [0:21:42 принцип LIFO](https://youtu.be/PzlLXQ3RaDs?t=1302) - [0:22:09 куча и стек / Heap and Stack](https://youtu.be/PzlLXQ3RaDs?t=1329) - [0:25:55 рекурсия / Recursion](https://youtu.be/PzlLXQ3RaDs?t=1555) - [0:27:15 коллекция / Collection](https://youtu.be/PzlLXQ3RaDs?t=1635) - [0:27:51 массив / Array](https://youtu.be/PzlLXQ3RaDs?t=1671) - [0:28:18 отладка / Debug](https://youtu.be/PzlLXQ3RaDs?t=1698) - [0:28:23 компонент / Component](https://youtu.be/PzlLXQ3RaDs?t=1703) -- [0:29:37 модуль / Module 0:30:16 модульность / Modularity 0:33:52 ограничения 0:31:50 заглушки / Stubs](https://youtu.be/PzlLXQ3RaDs?t=1777) +- [0:29:37 модуль / Module](https://youtu.be/PzlLXQ3RaDs?t=1777) +- [0:30:16 модульность / Modularity](https://youtu.be/PzlLXQ3RaDs?t=1816) +- [0:33:52 ограничения](https://youtu.be/PzlLXQ3RaDs?t=2032) +- [0:31:50 заглушки / Stubs](https://youtu.be/PzlLXQ3RaDs?t=1910) - [0:36:19 библиотека / Library](https://youtu.be/PzlLXQ3RaDs?t=2179) -- [0:37:13 импорт и экспорт идентификаторов / Import and Export Identifiers 0:41:30 новый синтаксис](https://youtu.be/PzlLXQ3RaDs?t=2233) -- [0:45:22 объект или экземпляр / Object or Instance 0:47:08 2 способа задания Instance](https://youtu.be/PzlLXQ3RaDs?t=2722) -- [0:47:47 класс / Class 0:49:16 примеры](https://youtu.be/PzlLXQ3RaDs?t=2867) -- [0:51:30 инстанциирование / Instantiation 0:52:59 примеры](https://youtu.be/PzlLXQ3RaDs?t=3090) +- [0:37:13 импорт и экспорт идентификаторов / Import and Export Identifiers](https://youtu.be/PzlLXQ3RaDs?t=2233) +- [0:41:30 новый синтаксис](https://youtu.be/PzlLXQ3RaDs?t=2490) +- [0:45:22 объект или экземпляр / Object or Instance](https://youtu.be/PzlLXQ3RaDs?t=2722) +- [0:47:08 2 способа задания Instance](https://youtu.be/PzlLXQ3RaDs?t=2828) +- [0:47:47 класс / Class](https://youtu.be/PzlLXQ3RaDs?t=2867) +- [0:49:16 примеры](https://youtu.be/PzlLXQ3RaDs?t=2956) +- [0:51:30 инстанциирование / Instantiation](https://youtu.be/PzlLXQ3RaDs?t=3090) +- [0:52:59 примеры](https://youtu.be/PzlLXQ3RaDs?t=3179) - [0:54:59 область видимости / Scope](https://youtu.be/PzlLXQ3RaDs?t=3299) - [0:57:05 лексический(ое) контекст (окружение) / Lexical environment](https://youtu.be/PzlLXQ3RaDs?t=3425) - [0:58:19 объектный контекст функции / Object context: this](https://youtu.be/PzlLXQ3RaDs?t=3499) @@ -184,98 +202,99 @@ - [1:12:28 фрейм](https://youtu.be/PzlLXQ3RaDs?t=4348) - [1:14:46 строка в свойстве объекта](https://youtu.be/PzlLXQ3RaDs?t=4486) - [1:16:21 класс и объект](https://youtu.be/PzlLXQ3RaDs?t=4581) -- [1:16:47 класс и прототип](https://www.youtube.com/watch?v=PzlLXQ3RaDs&t=4607) -- [1:17:37 аллокирование значений в куче и стеке](https://youtu.be/PzlLXQ3RaDs?t=4607) +- [1:16:47 класс и прототип](https://youtu.be/PzlLXQ3RaDs?t=4607) +- [1:17:37 аллокирование значений в куче и стеке](https://youtu.be/PzlLXQ3RaDs?t=4657) - [1:18:43 сборщик мусора](https://youtu.be/PzlLXQ3RaDs?t=4723) - [1:20:29 терминология на английском и русском](https://youtu.be/PzlLXQ3RaDs?t=4829) ## [Функции, лямбды (стрелочные функции), контексты, замыкания в JavaScript](https://youtu.be/pn5myCmpV2U) -- [00:00:00 Введение ](https://youtu.be/pn5myCmpV2U?t=0) -- [00:11:22 Функция объявление (Declaration)](https://youtu.be/pn5myCmpV2U?t=682) -- [00:12:46 Функция выражение (Expression)](https://youtu.be/pn5myCmpV2U?t=766) -- [00:16:07 Лямбда-выражение (Lambda expression) или функция-стрелка (Arrow function) ](https://youtu.be/pn5myCmpV2U?t=967) -- [00:16:43 Лямбда-функция (Lambda function) ](https://youtu.be/pn5myCmpV2U?t=1003) -- [00:18:45 Область видимости (Scope)](https://youtu.be/pn5myCmpV2U?t=1125) -- [00:25:00 Функции, как абстракции](https://youtu.be/pn5myCmpV2U?t=1500) -- [00:26:43 Методы функции (name, length, toString( ) )](https://youtu.be/pn5myCmpV2U?t=1603) -- [00:31:26 Значения по умолчанию у функции ](https://youtu.be/pn5myCmpV2U?t=1886) -- [00:36:46 Rest-оператор (...args)](https://youtu.be/pn5myCmpV2U?t=2206) -- [00:41:49 Способ определения функции, через new Function](https://youtu.be/pn5myCmpV2U?t=2509) -- [00:44:46 Функции внутри объекта](https://youtu.be/pn5myCmpV2U?t=2686) -- [00:50:42 Обращение к полям объекта из привязанной функции, через this](https://youtu.be/pn5myCmpV2U?t=3042) -- [00:55:24 История синтаксиса создания контекстов, через самовызывающиеся функции ( IIFE)](https://youtu.be/pn5myCmpV2U?t=3324) -- [00:58:30 Методы функции, наследуемой от объекта (call, apply)](https://youtu.be/pn5myCmpV2U?t=3510) -- [01:00:53 Комментирование функций](https://youtu.be/pn5myCmpV2U?t=3653) -- [01:01:27 Задание декомпозиции функции](https://youtu.be/pn5myCmpV2U?t=3687) -- [01:04:24 Замыкание: context ](https://youtu.be/pn5myCmpV2U?t=3864) -- [01:08:41 Замыкание: chainning ](https://youtu.be/pn5myCmpV2U?t=4121) -- [01:11:55 Замыкание: summator ](https://youtu.be/pn5myCmpV2U?t=4315) -- [01:14:16 Замыкание: recursion](https://youtu.be/pn5myCmpV2U?t=4456) +- [00:00:00 Введение](https://youtu.be/pn5myCmpV2U?t=0) +- [00:11:22 Функция объявление (Declaration)](https://youtu.be/pn5myCmpV2U?t=682) +- [00:12:46 Функция выражение (Expression)](https://youtu.be/pn5myCmpV2U?t=766) +- [00:16:07 Лямбда-выражение (Lambda expression) или функция-стрелка (Arrow function)](https://youtu.be/pn5myCmpV2U?t=967) +- [00:16:43 Лямбда-функция (Lambda function)](https://youtu.be/pn5myCmpV2U?t=1003) +- [00:18:45 Область видимости (Scope)](https://youtu.be/pn5myCmpV2U?t=1125) +- [00:25:00 Функции, как абстракции](https://youtu.be/pn5myCmpV2U?t=1500) +- [00:26:43 Методы функции (name, length, toString( ) )](https://youtu.be/pn5myCmpV2U?t=1603) +- [00:31:26 Значения по умолчанию у функции](https://youtu.be/pn5myCmpV2U?t=1886) +- [00:36:46 Rest-оператор (...args)](https://youtu.be/pn5myCmpV2U?t=2206) +- [00:41:49 Способ определения функции, через new Function](https://youtu.be/pn5myCmpV2U?t=2509) +- [00:44:46 Функции внутри объекта](https://youtu.be/pn5myCmpV2U?t=2686) +- [00:50:42 Обращение к полям объекта из привязанной функции, через this](https://youtu.be/pn5myCmpV2U?t=3042) +- [00:55:24 История синтаксиса создания контекстов, через самовызывающиеся функции ( IIFE)](https://youtu.be/pn5myCmpV2U?t=3324) +- [00:58:30 Методы функции, наследуемой от объекта (call, apply)](https://youtu.be/pn5myCmpV2U?t=3510) +- [01:00:53 Комментирование функций](https://youtu.be/pn5myCmpV2U?t=3653) +- [01:01:27 Задание декомпозиции функции](https://youtu.be/pn5myCmpV2U?t=3687) +- [01:04:24 Замыкание: context](https://youtu.be/pn5myCmpV2U?t=3864) +- [01:08:41 Замыкание: chainning](https://youtu.be/pn5myCmpV2U?t=4121) +- [01:11:55 Замыкание: summator](https://youtu.be/pn5myCmpV2U?t=4315) +- [01:14:16 Замыкание: recursion](https://youtu.be/pn5myCmpV2U?t=4456) ## [Массивы, объекты, классы, прототипы в JavaScript](https://youtu.be/VBMGnAPfmsY) -- [00:00:00 Объекты](https://youtu.be/VBMGnAPfmsY?t=0) -- [00:11:01 Массивы](https://youtu.be/VBMGnAPfmsY?t=661) -- [00:13:29 Cериализация объекта ](https://youtu.be/VBMGnAPfmsY?t=809) -- [00:15:46 Cериализация массива ](https://youtu.be/VBMGnAPfmsY?t=946) -- [00:19:20 Методы array](https://youtu.be/VBMGnAPfmsY?t=1160) -- [00:20:22 Циклы ](https://youtu.be/VBMGnAPfmsY?t=1222) -- [00:21:16 Цикл for-in-object ](https://youtu.be/VBMGnAPfmsY?t=1276) -- [00:22:02 Цикл for-in-array](https://youtu.be/VBMGnAPfmsY?t=1322) -- [00:24:10 Цикл for-of-array ](https://youtu.be/VBMGnAPfmsY?t=1450) -- [00:25:05 Метод array.forEach](https://youtu.be/VBMGnAPfmsY?t=1505) -- [00:29:10 Метод array.map](https://youtu.be/VBMGnAPfmsY?t=1750) -- [00:33:59 Итерация матрицы, через for-of-array](https://youtu.be/VBMGnAPfmsY?t=2039) -- [00:38:38 Итерация матрицы, через array.forEach](https://youtu.be/VBMGnAPfmsY?t=2318) -- [00:39:22 Итерация матрицы, через for-in-array](https://youtu.be/VBMGnAPfmsY?t=2362) -- [00:39:45 Метод array.reduce](https://youtu.be/VBMGnAPfmsY?t=2385) -- [00:44:39 Методы объекта](https://youtu.be/VBMGnAPfmsY?t=2679) -- [00:46:38 Прототип](https://youtu.be/VBMGnAPfmsY?t=2798) -- [00:53:32 Класс ](https://youtu.be/VBMGnAPfmsY?t=3212) -- [00:56:04 Связывание методов с объектом, при помощи замыкания](https://youtu.be/VBMGnAPfmsY?t=3364) -- [01:00:08 Связывание методов с объектом, при помощи метода bind](https://youtu.be/VBMGnAPfmsY?t=3608) -- [01:03:19 Пример абстракции, при помощи замыкания](https://youtu.be/VBMGnAPfmsY?t=3799) -- [01:11:05 Пример абстракции, при помощи прототипа](https://youtu.be/VBMGnAPfmsY?t=4265) -- [01:12:30 Пример абстракции, при помощи класса](https://youtu.be/VBMGnAPfmsY?t=4350) -- [01:13:08 Наследование через синтаксис прототипов](https://youtu.be/VBMGnAPfmsY?t=4388) -- [01:18:50 Наследование через синтаксис классов ](https://youtu.be/VBMGnAPfmsY?t=4730) -- [01:21:05 Связывание объекта с методом класса при помощи прототипа ](https://youtu.be/VBMGnAPfmsY?t=4865) -- [01:23:52 Присваивание методов внутри конструктора, при прототипном подходе ](https://youtu.be/VBMGnAPfmsY?t=5032) -- [01:25:10 Get/Set класса ](https://youtu.be/VBMGnAPfmsY?t=5110) -- [01:27:00 Пример](https://youtu.be/VBMGnAPfmsY?t=5220) +- [00:00:00 Объекты](https://youtu.be/VBMGnAPfmsY?t=0) +- [00:11:01 Массивы](https://youtu.be/VBMGnAPfmsY?t=661) +- [00:13:29 Cериализация объекта](https://youtu.be/VBMGnAPfmsY?t=809) +- [00:15:46 Cериализация массива](https://youtu.be/VBMGnAPfmsY?t=946) +- [00:19:20 Методы array](https://youtu.be/VBMGnAPfmsY?t=1160) +- [00:20:22 Циклы](https://youtu.be/VBMGnAPfmsY?t=1222) +- [00:21:16 Цикл for-in-object](https://youtu.be/VBMGnAPfmsY?t=1276) +- [00:22:02 Цикл for-in-array](https://youtu.be/VBMGnAPfmsY?t=1322) +- [00:24:10 Цикл for-of-array](https://youtu.be/VBMGnAPfmsY?t=1450) +- [00:25:05 Метод array.forEach](https://youtu.be/VBMGnAPfmsY?t=1505) +- [00:29:10 Метод array.map](https://youtu.be/VBMGnAPfmsY?t=1750) +- [00:33:59 Итерация матрицы, через for-of-array](https://youtu.be/VBMGnAPfmsY?t=2039) +- [00:38:38 Итерация матрицы, через array.forEach](https://youtu.be/VBMGnAPfmsY?t=2318) +- [00:39:22 Итерация матрицы, через for-in-array](https://youtu.be/VBMGnAPfmsY?t=2362) +- [00:39:45 Метод array.reduce](https://youtu.be/VBMGnAPfmsY?t=2385) +- [00:44:39 Методы объекта](https://youtu.be/VBMGnAPfmsY?t=2679) +- [00:46:38 Прототип](https://youtu.be/VBMGnAPfmsY?t=2798) +- [00:53:32 Класс](https://youtu.be/VBMGnAPfmsY?t=3212) +- [00:56:04 Связывание методов с объектом, при помощи замыкания](https://youtu.be/VBMGnAPfmsY?t=3364) +- [01:00:08 Связывание методов с объектом, при помощи метода bind](https://youtu.be/VBMGnAPfmsY?t=3608) +- [01:03:19 Пример абстракции, при помощи замыкания](https://youtu.be/VBMGnAPfmsY?t=3799) +- [01:11:05 Пример абстракции, при помощи прототипа](https://youtu.be/VBMGnAPfmsY?t=4265) +- [01:12:30 Пример абстракции, при помощи класса](https://youtu.be/VBMGnAPfmsY?t=4350) +- [01:13:08 Наследование через синтаксис прототипов](https://youtu.be/VBMGnAPfmsY?t=4388) +- [01:18:50 Наследование через синтаксис классов](https://youtu.be/VBMGnAPfmsY?t=4730) +- [01:21:05 Связывание объекта с методом класса при помощи прототипа](https://youtu.be/VBMGnAPfmsY?t=4865) +- [01:23:52 Присваивание методов внутри конструктора, при прототипном подходе](https://youtu.be/VBMGnAPfmsY?t=5032) +- [01:25:10 Get/Set класса](https://youtu.be/VBMGnAPfmsY?t=5110) +- [01:27:00 Пример](https://youtu.be/VBMGnAPfmsY?t=5220) ## [Языки программирования: обзор, сравнение, выбор](https://youtu.be/enHA1CRkJe0) -- [0:00:02 обзорная лекция о классификации ЯП](https://youtu.be/enHA1CRkJe0?t=2) -- [0:00:53 типизация: статическая / динамическая](https://youtu.be/enHA1CRkJe0?t=53) -- [0:07:37 сильная / слабая || строгая / нестрогая](https://youtu.be/enHA1CRkJe0?t=457) -- [0:10:08 явная / неявная](https://youtu.be/enHA1CRkJe0?t=608) -- [0:13:58 утиная 0:18:26 протоколы](https://youtu.be/enHA1CRkJe0?t=838) -- [0:20:36 ниже и ближе к машине / выше и ближе к человеку](https://youtu.be/enHA1CRkJe0?t=1236) -- [0:32:20 сравнение asm и машинного кода](https://youtu.be/enHA1CRkJe0?t=1940) -- [0:39:38 сравнение asm и js](https://youtu.be/enHA1CRkJe0?t=2378) -- [0:42:47 функции и типы 1 класса](https://youtu.be/enHA1CRkJe0?t=2567) -- [0:44:39 распространённость](https://youtu.be/enHA1CRkJe0?t=2679) -- [0:45:47 скорость, читаемость](https://youtu.be/enHA1CRkJe0?t=2747) -- [0:48:21 владение правами / влияние на ЯП](https://youtu.be/enHA1CRkJe0?t=2901) -- [0:51:13 специализация](https://youtu.be/enHA1CRkJe0?t=3073) -- [0:53:13 наследственность](https://youtu.be/enHA1CRkJe0?t=3193) -- [0:56:33 инструментарий](https://youtu.be/enHA1CRkJe0?t=3393) -- [0:58:20 поддержка](https://youtu.be/enHA1CRkJe0?t=3500) -- [1:02:58 скорость развития](https://youtu.be/enHA1CRkJe0?t=3778) -- [1:04:12 системное программирование](https://youtu.be/enHA1CRkJe0?t=3852) -- [1:05:51 оконные приложения](https://youtu.be/enHA1CRkJe0?t=3951) -- [1:06:27 встраиваемые системы и автоматизация](https://youtu.be/enHA1CRkJe0?t=3987) -- [1:07:02 базы данных](https://youtu.be/enHA1CRkJe0?t=4022) -- [1:07:45 сетевые сервера](https://youtu.be/enHA1CRkJe0?t=4065) -- [1:09:03 вычисления](https://youtu.be/enHA1CRkJe0?t=4143) -- [1:10:45 ИИ](https://youtu.be/enHA1CRkJe0?t=4245) -- [1:11:52 параллельные вычисления, веб](https://youtu.be/enHA1CRkJe0?t=4312) -- [1:12:38 скрипты](https://youtu.be/enHA1CRkJe0?t=4358) -- [1:13:36 тестирование](https://youtu.be/enHA1CRkJe0?t=4416) -- [1:14:20 мобильные платформы](https://youtu.be/enHA1CRkJe0?t=4460) -- [1:16:10 игры, графика](https://youtu.be/enHA1CRkJe0?t=4570) +- [0:00:02 обзорная лекция о классификации ЯП](https://youtu.be/enHA1CRkJe0?t=2) +- [0:00:53 типизация: статическая / динамическая](https://youtu.be/enHA1CRkJe0?t=53) +- [0:07:37 сильная / слабая || строгая / нестрогая](https://youtu.be/enHA1CRkJe0?t=457) +- [0:10:08 явная / неявная](https://youtu.be/enHA1CRkJe0?t=608) +- [0:13:58 утиная](https://youtu.be/enHA1CRkJe0?t=838) +- [0:18:26 протоколы](https://youtu.be/enHA1CRkJe0?t=1106) +- [0:20:36 ниже и ближе к машине / выше и ближе к человеку](https://youtu.be/enHA1CRkJe0?t=1236) +- [0:32:20 сравнение asm и машинного кода](https://youtu.be/enHA1CRkJe0?t=1940) +- [0:39:38 сравнение asm и js](https://youtu.be/enHA1CRkJe0?t=2378) +- [0:42:47 функции и типы 1 класса](https://youtu.be/enHA1CRkJe0?t=2567) +- [0:44:39 распространённость](https://youtu.be/enHA1CRkJe0?t=2679) +- [0:45:47 скорость, читаемость](https://youtu.be/enHA1CRkJe0?t=2747) +- [0:48:21 владение правами / влияние на ЯП](https://youtu.be/enHA1CRkJe0?t=2901) +- [0:51:13 специализация](https://youtu.be/enHA1CRkJe0?t=3073) +- [0:53:13 наследственность](https://youtu.be/enHA1CRkJe0?t=3193) +- [0:56:33 инструментарий](https://youtu.be/enHA1CRkJe0?t=3393) +- [0:58:20 поддержка](https://youtu.be/enHA1CRkJe0?t=3500) +- [1:02:58 скорость развития](https://youtu.be/enHA1CRkJe0?t=3778) +- [1:04:12 системное программирование](https://youtu.be/enHA1CRkJe0?t=3852) +- [1:05:51 оконные приложения](https://youtu.be/enHA1CRkJe0?t=3951) +- [1:06:27 встраиваемые системы и автоматизация](https://youtu.be/enHA1CRkJe0?t=3987) +- [1:07:02 базы данных](https://youtu.be/enHA1CRkJe0?t=4022) +- [1:07:45 сетевые сервера](https://youtu.be/enHA1CRkJe0?t=4065) +- [1:09:03 вычисления](https://youtu.be/enHA1CRkJe0?t=4143) +- [1:10:45 ИИ](https://youtu.be/enHA1CRkJe0?t=4245) +- [1:11:52 параллельные вычисления, веб](https://youtu.be/enHA1CRkJe0?t=4312) +- [1:12:38 скрипты](https://youtu.be/enHA1CRkJe0?t=4358) +- [1:13:36 тестирование](https://youtu.be/enHA1CRkJe0?t=4416) +- [1:14:20 мобильные платформы](https://youtu.be/enHA1CRkJe0?t=4460) +- [1:16:10 игры, графика](https://youtu.be/enHA1CRkJe0?t=4570) ## [JavaScript: Ответы на вопросы](https://youtu.be/wqkQ6eslyzY) @@ -293,96 +312,96 @@ ## [Частичное применение и каррирование в JavaScript](https://youtu.be/ND8KQ5xjk7o) -- [00:00:00 Замыкание](https://youtu.be/ND8KQ5xjk7o?t=0) -- [00:04:54 Лямбда- функция](https://youtu.be/ND8KQ5xjk7o?t=294) -- [00:06:06 Метод bind](https://youtu.be/ND8KQ5xjk7o?t=366) -- [00:08:30 Абстрагированный пример функции](https://youtu.be/ND8KQ5xjk7o?t=510) -- [00:13:42 Абстрагированный пример функции (расширение)](https://youtu.be/ND8KQ5xjk7o?t=822) -- [00:15:47 Неправильная реализация каррирования](https://youtu.be/ND8KQ5xjk7o?t=947) -- [00:22:22 Правильная реализация каррирования](https://youtu.be/ND8KQ5xjk7o?t=1342) -- [00:28:54 Правильная реализация каррирования (расширение)](https://youtu.be/ND8KQ5xjk7o?t=1734) -- [00:31:41 Функциональные абстракции (superposition)](https://youtu.be/ND8KQ5xjk7o?t=1901) -- [00:38:02 Функциональные абстракции, с сохранением выражений (composition)](https://youtu.be/ND8KQ5xjk7o?t=2282) -- [00:45:05 Композиция с 2 функциями](https://youtu.be/ND8KQ5xjk7o?t=2705) -- [00:46:05 Композиция с n - функциями, при помощи метода reduce](https://youtu.be/ND8KQ5xjk7o?t=2765) -- [00:51:25 Композиция с n - функциями, при помощи цикла](https://youtu.be/ND8KQ5xjk7o?t=3085) -- [00:54:29 Композиция с n - функциями, при помощи рекурсии](https://youtu.be/ND8KQ5xjk7o?t=3269) -- [00:57:40 Композиция асинхронных функций](https://youtu.be/ND8KQ5xjk7o?t=3460) -- [01:01:27 Обобщение](https://youtu.be/ND8KQ5xjk7o?t=3687) +- [00:00:00 Замыкание](https://youtu.be/ND8KQ5xjk7o?t=0) +- [00:04:54 Лямбда- функция](https://youtu.be/ND8KQ5xjk7o?t=294) +- [00:06:06 Метод bind](https://youtu.be/ND8KQ5xjk7o?t=366) +- [00:08:30 Абстрагированный пример функции](https://youtu.be/ND8KQ5xjk7o?t=510) +- [00:13:42 Абстрагированный пример функции (расширение)](https://youtu.be/ND8KQ5xjk7o?t=822) +- [00:15:47 Неправильная реализация каррирования](https://youtu.be/ND8KQ5xjk7o?t=947) +- [00:22:22 Правильная реализация каррирования](https://youtu.be/ND8KQ5xjk7o?t=1342) +- [00:28:54 Правильная реализация каррирования (расширение)](https://youtu.be/ND8KQ5xjk7o?t=1734) +- [00:31:41 Функциональные абстракции (superposition)](https://youtu.be/ND8KQ5xjk7o?t=1901) +- [00:38:02 Функциональные абстракции, с сохранением выражений (composition)](https://youtu.be/ND8KQ5xjk7o?t=2282) +- [00:45:05 Композиция с 2 функциями](https://youtu.be/ND8KQ5xjk7o?t=2705) +- [00:46:05 Композиция с n - функциями, при помощи метода reduce](https://youtu.be/ND8KQ5xjk7o?t=2765) +- [00:51:25 Композиция с n - функциями, при помощи цикла](https://youtu.be/ND8KQ5xjk7o?t=3085) +- [00:54:29 Композиция с n - функциями, при помощи рекурсии](https://youtu.be/ND8KQ5xjk7o?t=3269) +- [00:57:40 Композиция асинхронных функций](https://youtu.be/ND8KQ5xjk7o?t=3460) +- [01:01:27 Обобщение](https://youtu.be/ND8KQ5xjk7o?t=3687) ## [Функции высшего порядка, колбеки, события на JavaScript](https://youtu.be/1vqATwbGHnc) -- [00:00:00 Определение](https://youtu.be/1vqATwbGHnc?t=0) -- [00:02:03 Математическая функция](https://youtu.be/1vqATwbGHnc?t=123) -- [00:05:57 Функция обратного вызова (callback) ](https://youtu.be/1vqATwbGHnc?t=357) -- [00:09:33 Замыкание](https://youtu.be/1vqATwbGHnc?t=573) -- [00:10:51 Цепочка вызовов ](https://youtu.be/1vqATwbGHnc?t=651) -- [00:12:40 Сохранение кэша с помощью замыкания](https://youtu.be/1vqATwbGHnc?t=760) -- [00:18:29 Добавление функции поведение логирования](https://youtu.be/1vqATwbGHnc?t=1109) -- [00:21:45 Обобщение](https://youtu.be/1vqATwbGHnc?t=1305) -- [00:22:45 Сallback](https://youtu.be/1vqATwbGHnc?t=1365) -- [00:25:32 Сallback асинхронной функции считывание файла](https://youtu.be/1vqATwbGHnc?t=1532) -- [00:28:36 Сallback именованный](https://youtu.be/1vqATwbGHnc?t=1716) -- [00:33:01 Сallback-timer ](https://youtu.be/1vqATwbGHnc?t=1981) -- [00:36:20 Сallback-timer-curry](https://youtu.be/1vqATwbGHnc?t=2180) -- [00:38:59 Listener](https://youtu.be/1vqATwbGHnc?t=2339) -- [00:41:10 Listener-timer](https://youtu.be/1vqATwbGHnc?t=2470) -- [00:46:59 Event](https://youtu.be/1vqATwbGHnc?t=2819) -- [00:53:45 Event-imitter](https://youtu.be/1vqATwbGHnc?t=3225) -- [00:57:48 Deferred object (отложенный объект)](https://youtu.be/1vqATwbGHnc?t=3468) -- [01:01:31 Errors](https://youtu.be/1vqATwbGHnc?t=3691) +- [00:00:00 Определение](https://youtu.be/1vqATwbGHnc?t=0) +- [00:02:03 Математическая функция](https://youtu.be/1vqATwbGHnc?t=123) +- [00:05:57 Функция обратного вызова (callback)](https://youtu.be/1vqATwbGHnc?t=357) +- [00:09:33 Замыкание](https://youtu.be/1vqATwbGHnc?t=573) +- [00:10:51 Цепочка вызовов](https://youtu.be/1vqATwbGHnc?t=651) +- [00:12:40 Сохранение кэша с помощью замыкания](https://youtu.be/1vqATwbGHnc?t=760) +- [00:18:29 Добавление функции поведение логирования](https://youtu.be/1vqATwbGHnc?t=1109) +- [00:21:45 Обобщение](https://youtu.be/1vqATwbGHnc?t=1305) +- [00:22:45 Сallback](https://youtu.be/1vqATwbGHnc?t=1365) +- [00:25:32 Сallback асинхронной функции считывание файла](https://youtu.be/1vqATwbGHnc?t=1532) +- [00:28:36 Сallback именованный](https://youtu.be/1vqATwbGHnc?t=1716) +- [00:33:01 Сallback-timer](https://youtu.be/1vqATwbGHnc?t=1981) +- [00:36:20 Сallback-timer-curry](https://youtu.be/1vqATwbGHnc?t=2180) +- [00:38:59 Listener](https://youtu.be/1vqATwbGHnc?t=2339) +- [00:41:10 Listener-timer](https://youtu.be/1vqATwbGHnc?t=2470) +- [00:46:59 Event](https://youtu.be/1vqATwbGHnc?t=2819) +- [00:53:45 Event-imitter](https://youtu.be/1vqATwbGHnc?t=3225) +- [00:57:48 Deferred object (отложенный объект)](https://youtu.be/1vqATwbGHnc?t=3468) +- [01:01:31 Errors](https://youtu.be/1vqATwbGHnc?t=3691) ## [Работа со строками, шаблонами и юникодом в JavaScript](https://youtu.be/GcopcHQkA8M) -- [00:00:00 Unicode строки](https://youtu.be/GcopcHQkA8M?t=0) -- [00:12:07 Обычные строки](https://youtu.be/GcopcHQkA8M?t=727) -- [00:17:03 Методы строки ](https://youtu.be/GcopcHQkA8M?t=1023) -- [00:23:09 Модификация строк ](https://youtu.be/GcopcHQkA8M?t=1389) -- [00:28:00 Получение подстроки в строке ](https://youtu.be/GcopcHQkA8M?t=1680) -- [00:34:45 Polyffill ](https://youtu.be/GcopcHQkA8M?t=2085) -- [00:37:54 Методы padEnd и padStart ](https://youtu.be/GcopcHQkA8M?t=2274) -- [00:40:45 Добавление функции для шаблонизирующей строки](https://youtu.be/GcopcHQkA8M?t=2445) -- [00:44:27 Пример ](https://youtu.be/GcopcHQkA8M?t=2667) -- [00:48:29 Библиотека Concolor.js](https://youtu.be/GcopcHQkA8M?t=2909) +- [00:00:00 Unicode строки](https://youtu.be/GcopcHQkA8M?t=0) +- [00:12:07 Обычные строки](https://youtu.be/GcopcHQkA8M?t=727) +- [00:17:03 Методы строки](https://youtu.be/GcopcHQkA8M?t=1023) +- [00:23:09 Модификация строк](https://youtu.be/GcopcHQkA8M?t=1389) +- [00:28:00 Получение подстроки в строке](https://youtu.be/GcopcHQkA8M?t=1680) +- [00:34:45 Polyffill](https://youtu.be/GcopcHQkA8M?t=2085) +- [00:37:54 Методы padEnd и padStart](https://youtu.be/GcopcHQkA8M?t=2274) +- [00:40:45 Добавление функции для шаблонизирующей строки](https://youtu.be/GcopcHQkA8M?t=2445) +- [00:44:27 Пример](https://youtu.be/GcopcHQkA8M?t=2667) +- [00:48:29 Библиотека Concolor.js](https://youtu.be/GcopcHQkA8M?t=2909) ## [Регулярные выражения и парсинг в JavaScript](https://youtu.be/-ef2E0ozxao) -- [00:00:00 Введение](https://youtu.be/-ef2E0ozxao?t=0) -- [00:10:30 Синтаксис регулярных выражений ](https://youtu.be/-ef2E0ozxao?t=630) -- [00:12:54 Задание регулярного выражения ](https://youtu.be/-ef2E0ozxao?t=774) -- [00:30:38 RegExp ](https://youtu.be/-ef2E0ozxao?t=1838) -- [00:38:11 Метод match ](https://youtu.be/-ef2E0ozxao?t=2291) -- [00:46:48 Метод split](https://youtu.be/-ef2E0ozxao?t=2808) -- [00:49:28 Метод replace ](https://youtu.be/-ef2E0ozxao?t=2968) -- [00:50:43 Метод replace с аргументом функции ](https://youtu.be/-ef2E0ozxao?t=3043) -- [00:53:28 Метод search ](https://youtu.be/-ef2E0ozxao?t=3208) -- [00:55:05 Обобщение](https://youtu.be/-ef2E0ozxao?t=3305) +- [00:00:00 Введение](https://youtu.be/-ef2E0ozxao?t=0) +- [00:10:30 Синтаксис регулярных выражений](https://youtu.be/-ef2E0ozxao?t=630) +- [00:12:54 Задание регулярного выражения](https://youtu.be/-ef2E0ozxao?t=774) +- [00:30:38 RegExp](https://youtu.be/-ef2E0ozxao?t=1838) +- [00:38:11 Метод match](https://youtu.be/-ef2E0ozxao?t=2291) +- [00:46:48 Метод split](https://youtu.be/-ef2E0ozxao?t=2808) +- [00:49:28 Метод replace](https://youtu.be/-ef2E0ozxao?t=2968) +- [00:50:43 Метод replace с аргументом функции](https://youtu.be/-ef2E0ozxao?t=3043) +- [00:53:28 Метод search](https://youtu.be/-ef2E0ozxao?t=3208) +- [00:55:05 Обобщение](https://youtu.be/-ef2E0ozxao?t=3305) ## [Примеси, обертки, декораторы, мемоизация в JavaScript](https://youtu.be/oRQ0kQr1N-U) -- [00:00:00 Синхронная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=0) -- [00:02:55 Синхронная универсальная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=175) -- [00:08:28 Асинхронная универсальная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=508) -- [00:15:50 Синхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/oRQ0kQr1N-U?t=950) -- [00:22:45 Асинхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/oRQ0kQr1N-U?t=1365) -- [00:25:38 Функция-обертка, которая ограничивает вызов функции до одного вызова (once) ](https://youtu.be/oRQ0kQr1N-U?t=1538) -- [00:27:36 Функция-обертка, которая ограничивает вызов функции до n-го вызова (limit)](https://youtu.be/oRQ0kQr1N-U?t=1656) -- [00:29:50 Функция-обертка, которая отменяет вызов функции (cancel)](https://youtu.be/oRQ0kQr1N-U?t=1790) -- [00:32:29 Функция-обертка с методами timeout, limit, cancel](https://youtu.be/oRQ0kQr1N-U?t=1949) -- [00:39:03 Функция-обертка с методами timeout, limit, cancel (оптимизированная)](https://youtu.be/oRQ0kQr1N-U?t=2343) -- [00:42:28 Функция-обертка, которая ограничивает один вызов за 200 мс (throttle)](https://youtu.be/oRQ0kQr1N-U?t=2548) -- [00:45:47 Примесь поля через точку ](https://youtu.be/oRQ0kQr1N-U?t=2747) -- [00:51:35 Примесь поля через функцию extend](https://youtu.be/oRQ0kQr1N-U?t=3095) -- [00:57:35 Примесь поля через object.assign( )](https://youtu.be/oRQ0kQr1N-U?t=3455) -- [00:59:18 Примесь поведения ](https://youtu.be/oRQ0kQr1N-U?t=3558) -- [01:02:23 Примесь изменения класса](https://youtu.be/oRQ0kQr1N-U?t=3743) -- [01:06:50 Определение](https://youtu.be/oRQ0kQr1N-U?t=4010) -- [01:07:30 Реализация простой мемоизации ](https://youtu.be/oRQ0kQr1N-U?t=4050) -- [01:14:43 Реализация простой мемоизации с проверкой скорости ](https://youtu.be/oRQ0kQr1N-U?t=4483) -- [01:20:43 Удаление накопленного кэша ](https://youtu.be/oRQ0kQr1N-U?t=4843) -- [01:25:35 Асинхронная мемоизация ](https://youtu.be/oRQ0kQr1N-U?t=5135) -- [01:31:10 Преобразование аргументов и ключей в hash-функцию](https://youtu.be/oRQ0kQr1N-U?t=5470) -- [01:33:32 Реализация сложной мемоизации](https://youtu.be/oRQ0kQr1N-U?t=5612) +- [00:00:00 Синхронная функция-обертка](https://youtu.be/oRQ0kQr1N-U?t=0) +- [00:02:55 Синхронная универсальная функция-обертка](https://youtu.be/oRQ0kQr1N-U?t=175) +- [00:08:28 Асинхронная универсальная функция-обертка](https://youtu.be/oRQ0kQr1N-U?t=508) +- [00:15:50 Синхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/oRQ0kQr1N-U?t=950) +- [00:22:45 Асинхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/oRQ0kQr1N-U?t=1365) +- [00:25:38 Функция-обертка, которая ограничивает вызов функции до одного вызова (once)](https://youtu.be/oRQ0kQr1N-U?t=1538) +- [00:27:36 Функция-обертка, которая ограничивает вызов функции до n-го вызова (limit)](https://youtu.be/oRQ0kQr1N-U?t=1656) +- [00:29:50 Функция-обертка, которая отменяет вызов функции (cancel)](https://youtu.be/oRQ0kQr1N-U?t=1790) +- [00:32:29 Функция-обертка с методами timeout, limit, cancel](https://youtu.be/oRQ0kQr1N-U?t=1949) +- [00:39:03 Функция-обертка с методами timeout, limit, cancel (оптимизированная)](https://youtu.be/oRQ0kQr1N-U?t=2343) +- [00:42:28 Функция-обертка, которая ограничивает один вызов за 200 мс (throttle)](https://youtu.be/oRQ0kQr1N-U?t=2548) +- [00:45:47 Примесь поля через точку](https://youtu.be/oRQ0kQr1N-U?t=2747) +- [00:51:35 Примесь поля через функцию extend](https://youtu.be/oRQ0kQr1N-U?t=3095) +- [00:57:35 Примесь поля через object.assign( )](https://youtu.be/oRQ0kQr1N-U?t=3455) +- [00:59:18 Примесь поведения](https://youtu.be/oRQ0kQr1N-U?t=3558) +- [01:02:23 Примесь изменения класса](https://youtu.be/oRQ0kQr1N-U?t=3743) +- [01:06:50 Определение](https://youtu.be/oRQ0kQr1N-U?t=4010) +- [01:07:30 Реализация простой мемоизации](https://youtu.be/oRQ0kQr1N-U?t=4050) +- [01:14:43 Реализация простой мемоизации с проверкой скорости](https://youtu.be/oRQ0kQr1N-U?t=4483) +- [01:20:43 Удаление накопленного кэша](https://youtu.be/oRQ0kQr1N-U?t=4843) +- [01:25:35 Асинхронная мемоизация](https://youtu.be/oRQ0kQr1N-U?t=5135) +- [01:31:10 Преобразование аргументов и ключей в hash-функцию](https://youtu.be/oRQ0kQr1N-U?t=5470) +- [01:33:32 Реализация сложной мемоизации](https://youtu.be/oRQ0kQr1N-U?t=5612) ## [Консоль и командная строка в JavaScript и Node.js](https://youtu.be/5aSZyKi5BmE) @@ -393,24 +412,24 @@ ## [Чеининг функций и объектов, обработка ошибок в JavaScript](https://youtu.be/PfuEfIiLX34) -- [00:00:00 Введение ](https://youtu.be/PfuEfIiLX34?t=0) -- [00:01:10 Чеининг через синтаксис вызова функций ](https://youtu.be/PfuEfIiLX34?t=70) -- [00:02:12 Prototype ](https://youtu.be/PfuEfIiLX34?t=132) -- [00:05:45 Сlass](https://youtu.be/PfuEfIiLX34?t=345) -- [00:06:11 Functor](https://youtu.be/PfuEfIiLX34?t=371) -- [00:11:54 Mutable](https://youtu.be/PfuEfIiLX34?t=714) -- [00:16:34 Iterator](https://youtu.be/PfuEfIiLX34?t=994) -- [00:26:18 Promise ](https://youtu.be/PfuEfIiLX34?t=1578) -- [00:26:35 Test](https://youtu.be/PfuEfIiLX34?t=1595) -- [00:37:08 Compare ](https://youtu.be/PfuEfIiLX34?t=2228) -- [00:39:45 Benchmark](https://youtu.be/PfuEfIiLX34?t=2385) -- [00:40:48 Запуск и анализ тестов ](https://youtu.be/PfuEfIiLX34?t=2448) -- [01:03:48 Первый способ возвращение ошибок в синхронном коде ](https://youtu.be/PfuEfIiLX34?t=3828) -- [01:09:24 Второй способ возвращение ошибок в синхронном коде ](https://youtu.be/PfuEfIiLX34?t=4164) -- [01:12:26 Возвращение ошибок в асинхронном коде ](https://youtu.be/PfuEfIiLX34?t=4346) -- [01:16:14 Корректное возвращение ошибок ](https://youtu.be/PfuEfIiLX34?t=4574) -- [01:20:03 Обработка ошибок c promise ](https://youtu.be/PfuEfIiLX34?t=4803) -- [01:23:58 Обработка ошибок c async-await](https://youtu.be/PfuEfIiLX34?t=5038) +- [00:00:00 Введение](https://youtu.be/PfuEfIiLX34?t=0) +- [00:01:10 Чеининг через синтаксис вызова функций](https://youtu.be/PfuEfIiLX34?t=70) +- [00:02:12 Prototype](https://youtu.be/PfuEfIiLX34?t=132) +- [00:05:45 Сlass](https://youtu.be/PfuEfIiLX34?t=345) +- [00:06:11 Functor](https://youtu.be/PfuEfIiLX34?t=371) +- [00:11:54 Mutable](https://youtu.be/PfuEfIiLX34?t=714) +- [00:16:34 Iterator](https://youtu.be/PfuEfIiLX34?t=994) +- [00:26:18 Promise](https://youtu.be/PfuEfIiLX34?t=1578) +- [00:26:35 Test](https://youtu.be/PfuEfIiLX34?t=1595) +- [00:37:08 Compare](https://youtu.be/PfuEfIiLX34?t=2228) +- [00:39:45 Benchmark](https://youtu.be/PfuEfIiLX34?t=2385) +- [00:40:48 Запуск и анализ тестов](https://youtu.be/PfuEfIiLX34?t=2448) +- [01:03:48 Первый способ возвращение ошибок в синхронном коде](https://youtu.be/PfuEfIiLX34?t=3828) +- [01:09:24 Второй способ возвращение ошибок в синхронном коде](https://youtu.be/PfuEfIiLX34?t=4164) +- [01:12:26 Возвращение ошибок в асинхронном коде](https://youtu.be/PfuEfIiLX34?t=4346) +- [01:16:14 Корректное возвращение ошибок](https://youtu.be/PfuEfIiLX34?t=4574) +- [01:20:03 Обработка ошибок c promise](https://youtu.be/PfuEfIiLX34?t=4803) +- [01:23:58 Обработка ошибок c async-await](https://youtu.be/PfuEfIiLX34?t=5038) ## [Таймеры, таймауты, EventEmitter в JavaScript и Node.js](https://youtu.be/LK2jveAnRNg) @@ -439,22 +458,22 @@ ## [Итерирование, циклы и итераторы в JavaScript](https://youtu.be/lq3b5_UGJas) -- [00:00:00 Цикл for](https://youtu.be/lq3b5_UGJas?t=0) -- [00:02:45 Цикл while](https://youtu.be/lq3b5_UGJas?t=165) -- [00:03:16 Цикл do while ](https://youtu.be/lq3b5_UGJas?t=196) -- [00:03:33 Цикл for in object ](https://youtu.be/lq3b5_UGJas?t=213) -- [00:04:40 Цикл for in array](https://youtu.be/lq3b5_UGJas?t=280) -- [00:06:44 Цикл for of](https://youtu.be/lq3b5_UGJas?t=404) -- [00:08:45 Оператор break](https://youtu.be/lq3b5_UGJas?t=525) -- [00:10:13 Оператор continue](https://youtu.be/lq3b5_UGJas?t=613) -- [00:12:12 Итерирование по массиву методом forEach](https://youtu.be/lq3b5_UGJas?t=732) -- [00:15:10 Итерирование по массиву методом map ](https://youtu.be/lq3b5_UGJas?t=910) -- [00:21:23 Итерирование по двухмерному массиву (мatrix)](https://youtu.be/lq3b5_UGJas?t=1283) -- [00:25:38 Итерирование по двухмерному массиву (мatrix) методом forEach](https://youtu.be/lq3b5_UGJas?t=1538) -- [00:26:08 Итерирование массива методом reduce](https://youtu.be/lq3b5_UGJas?t=1568) -- [00:28:49 Итерирование по объекту ](https://youtu.be/lq3b5_UGJas?t=1729) -- [00:37:32 Обратный итератор ](https://youtu.be/lq3b5_UGJas?t=2252) -- [00:40:42 Асинхронный итератор](https://youtu.be/lq3b5_UGJas?t=2442) +- [00:00:00 Цикл for](https://youtu.be/lq3b5_UGJas?t=0) +- [00:02:45 Цикл while](https://youtu.be/lq3b5_UGJas?t=165) +- [00:03:16 Цикл do while](https://youtu.be/lq3b5_UGJas?t=196) +- [00:03:33 Цикл for in object](https://youtu.be/lq3b5_UGJas?t=213) +- [00:04:40 Цикл for in array](https://youtu.be/lq3b5_UGJas?t=280) +- [00:06:44 Цикл for of](https://youtu.be/lq3b5_UGJas?t=404) +- [00:08:45 Оператор break](https://youtu.be/lq3b5_UGJas?t=525) +- [00:10:13 Оператор continue](https://youtu.be/lq3b5_UGJas?t=613) +- [00:12:12 Итерирование по массиву методом forEach](https://youtu.be/lq3b5_UGJas?t=732) +- [00:15:10 Итерирование по массиву методом map](https://youtu.be/lq3b5_UGJas?t=910) +- [00:21:23 Итерирование по двухмерному массиву (мatrix)](https://youtu.be/lq3b5_UGJas?t=1283) +- [00:25:38 Итерирование по двухмерному массиву (мatrix) методом forEach](https://youtu.be/lq3b5_UGJas?t=1538) +- [00:26:08 Итерирование массива методом reduce](https://youtu.be/lq3b5_UGJas?t=1568) +- [00:28:49 Итерирование по объекту](https://youtu.be/lq3b5_UGJas?t=1729) +- [00:37:32 Обратный итератор](https://youtu.be/lq3b5_UGJas?t=2252) +- [00:40:42 Асинхронный итератор](https://youtu.be/lq3b5_UGJas?t=2442) ## [Архитектурный подход к программированию](https://youtu.be/d_vyO2CkiOc) @@ -469,12 +488,13 @@ - [01:05:20 Альтернативные варианты](https://youtu.be/d_vyO2CkiOc?t=3920) - [01:12:20 Как на самом деле](https://youtu.be/d_vyO2CkiOc?t=4340) - [01:13:45 Архитектура мечты](https://youtu.be/d_vyO2CkiOc?t=4425) -- [01:16:45 Современные возможности и требования ](https://youtu.be/d_vyO2CkiOc?t=4605) +- [01:16:45 Современные возможности и требования](https://youtu.be/d_vyO2CkiOc?t=4605) - [01:25:20 Топологии](https://youtu.be/d_vyO2CkiOc?t=5120) - [01:30:45 Итог](https://youtu.be/d_vyO2CkiOc?t=5445) ## [Функциональное программирование на JavaScript](https://youtu.be/0JxSs_GcvbQ) + ## [Реактивное программирование на JavaScript](https://youtu.be/7MH8-qQc-48) - [0:00 введение](https://youtu.be/7MH8-qQc-48?t=0) @@ -494,43 +514,43 @@ ## [Проекции и отображения наборов данных в JavaScript](https://youtu.be/lwJCq9inky8) -- [00:00:00 Введение ](https://youtu.be/lwJCq9inky8?t=0) -- [00:01:50 Простая проекция набора данных ](https://youtu.be/lwJCq9inky8?t=110) -- [00:09:23 Расширенная проекция набора данных ](https://youtu.be/lwJCq9inky8?t=563) -- [00:19:00 Расширенная проекция набора данных с кэшированием списка ключей](https://youtu.be/lwJCq9inky8?t=1140) -- [00:20:27 Оптимизация проекции набора данных с помощью императивного программирования ](https://youtu.be/lwJCq9inky8?t=1227) -- [00:23:11 Линзы из функционального программирования ](https://youtu.be/lwJCq9inky8?t=1391) -- [00:32:29 Сложная проекция набора данных ( проекция изнутри и снаружи ) ](https://youtu.be/lwJCq9inky8?t=1949) -- [00:39:08 Сложная проекция набора данных с помощью декларативного программирования ](https://youtu.be/lwJCq9inky8?t=2348) -- [00:41:57 Оптимизация сложной проекции ](https://youtu.be/lwJCq9inky8?t=2517) -- [00:51:36 Синтаксис фильтрации ](https://youtu.be/lwJCq9inky8?t=3096) -- [00:53:25 Вывод ](https://youtu.be/lwJCq9inky8?t=3205) -- [00:58:08 Оптимизация](https://youtu.be/lwJCq9inky8?t=3488) -- [01:00:00 Обобщение](https://youtu.be/lwJCq9inky8?t=3600) +- [00:00:00 Введение](https://youtu.be/lwJCq9inky8?t=0) +- [00:01:50 Простая проекция набора данных](https://youtu.be/lwJCq9inky8?t=110) +- [00:09:23 Расширенная проекция набора данных](https://youtu.be/lwJCq9inky8?t=563) +- [00:19:00 Расширенная проекция набора данных с кэшированием списка ключей](https://youtu.be/lwJCq9inky8?t=1140) +- [00:20:27 Оптимизация проекции набора данных с помощью императивного программирования](https://youtu.be/lwJCq9inky8?t=1227) +- [00:23:11 Линзы из функционального программирования](https://youtu.be/lwJCq9inky8?t=1391) +- [00:32:29 Сложная проекция набора данных ( проекция изнутри и снаружи )](https://youtu.be/lwJCq9inky8?t=1949) +- [00:39:08 Сложная проекция набора данных с помощью декларативного программирования](https://youtu.be/lwJCq9inky8?t=2348) +- [00:41:57 Оптимизация сложной проекции](https://youtu.be/lwJCq9inky8?t=2517) +- [00:51:36 Синтаксис фильтрации](https://youtu.be/lwJCq9inky8?t=3096) +- [00:53:25 Вывод](https://youtu.be/lwJCq9inky8?t=3205) +- [00:58:08 Оптимизация](https://youtu.be/lwJCq9inky8?t=3488) +- [01:00:00 Обобщение](https://youtu.be/lwJCq9inky8?t=3600) ## [Коллекции, множества, хештаблицы в JavaScript](https://youtu.be/hN0wsq5LNOc) -- [00:00:00 Введение](https://youtu.be/hN0wsq5LNOc?t=0) -- [00:01:35 Массивы ](https://youtu.be/hN0wsq5LNOc?t=95) -- [00:01:56 Склеивание массива методом concat ](https://youtu.be/hN0wsq5LNOc?t=116) -- [00:02:02 Склеивание массива оператором spread ](https://youtu.be/hN0wsq5LNOc?t=122) -- [00:03:17 Объекты ](https://youtu.be/hN0wsq5LNOc?t=197) -- [00:03:28 Склеивание объектов методом object.assign ](https://youtu.be/hN0wsq5LNOc?t=208) -- [00:04:01 Склеивание объектов оператором spread ](https://youtu.be/hN0wsq5LNOc?t=241) -- [00:04:38 Символический тип ](https://youtu.be/hN0wsq5LNOc?t=278) -- [00:06:50 Сохранение коллекции в файл ](https://youtu.be/hN0wsq5LNOc?t=410) -- [00:08:45 Использование конструированного map ](https://youtu.be/hN0wsq5LNOc?t=525) -- [00:14:29 Использование встроенного map ](https://youtu.be/hN0wsq5LNOc?t=869) -- [00:15:01 Отличия конструированного и встроенного map](https://youtu.be/hN0wsq5LNOc?t=901) -- [00:16:49 Способы итерации по map ](https://youtu.be/hN0wsq5LNOc?t=1009) -- [00:18:15 Построение индексов помощью map](https://youtu.be/hN0wsq5LNOc?t=1095) -- [00:23:15 WeakMap](https://youtu.be/hN0wsq5LNOc?t=1395) -- [00:27:55 Отдача значения без ключа ](https://youtu.be/hN0wsq5LNOc?t=1675) -- [00:29:15 Хранение уникальных значений ](https://youtu.be/hN0wsq5LNOc?t=1755) -- [00:33:32 Операции со массивами ](https://youtu.be/hN0wsq5LNOc?t=2012) -- [00:39:48 Операции над множествами ](https://youtu.be/hN0wsq5LNOc?t=2388) -- [00:42:32 WeakSet ](https://youtu.be/hN0wsq5LNOc?t=2552) -- [00:47:15 Обобщение](https://youtu.be/hN0wsq5LNOc?t=2835) +- [00:00:00 Введение](https://youtu.be/hN0wsq5LNOc?t=0) +- [00:01:35 Массивы](https://youtu.be/hN0wsq5LNOc?t=95) +- [00:01:56 Склеивание массива методом concat](https://youtu.be/hN0wsq5LNOc?t=116) +- [00:02:02 Склеивание массива оператором spread](https://youtu.be/hN0wsq5LNOc?t=122) +- [00:03:17 Объекты](https://youtu.be/hN0wsq5LNOc?t=197) +- [00:03:28 Склеивание объектов методом object.assign](https://youtu.be/hN0wsq5LNOc?t=208) +- [00:04:01 Склеивание объектов оператором spread](https://youtu.be/hN0wsq5LNOc?t=241) +- [00:04:38 Символический тип](https://youtu.be/hN0wsq5LNOc?t=278) +- [00:06:50 Сохранение коллекции в файл](https://youtu.be/hN0wsq5LNOc?t=410) +- [00:08:45 Использование конструированного map](https://youtu.be/hN0wsq5LNOc?t=525) +- [00:14:29 Использование встроенного map](https://youtu.be/hN0wsq5LNOc?t=869) +- [00:15:01 Отличия конструированного и встроенного map](https://youtu.be/hN0wsq5LNOc?t=901) +- [00:16:49 Способы итерации по map](https://youtu.be/hN0wsq5LNOc?t=1009) +- [00:18:15 Построение индексов помощью map](https://youtu.be/hN0wsq5LNOc?t=1095) +- [00:23:15 WeakMap](https://youtu.be/hN0wsq5LNOc?t=1395) +- [00:27:55 Отдача значения без ключа](https://youtu.be/hN0wsq5LNOc?t=1675) +- [00:29:15 Хранение уникальных значений](https://youtu.be/hN0wsq5LNOc?t=1755) +- [00:33:32 Операции со массивами](https://youtu.be/hN0wsq5LNOc?t=2012) +- [00:39:48 Операции над множествами](https://youtu.be/hN0wsq5LNOc?t=2388) +- [00:42:32 WeakSet](https://youtu.be/hN0wsq5LNOc?t=2552) +- [00:47:15 Обобщение](https://youtu.be/hN0wsq5LNOc?t=2835) ## [Неблокирующее асинхронное итерирование в JavaScript](https://youtu.be/wYA2cIRYLoA) @@ -544,166 +564,176 @@ ## [Структуры данных: списки, стек, очередь, дэк в JavaScript](https://youtu.be/9KvA4hDDSjk) -- [00:00:00 Идея структуры данных](https://youtu.be/9KvA4hDDSjk?t=0) -- [00:02:27 Списки на прототипах ( абстракция элемента ) ](https://youtu.be/9KvA4hDDSjk?t=147) -- [00:06:23 Списки на объектах ](https://youtu.be/9KvA4hDDSjk?t=383) -- [00:07:28 Списки на замыканиях](https://youtu.be/9KvA4hDDSjk?t=448) -- [00:10:56 Списки на объектах ( абстракция элемента и списка ) ](https://youtu.be/9KvA4hDDSjk?t=656) -- [00:18:22 Списки на классах](https://youtu.be/9KvA4hDDSjk?t=1102) -- [00:21:08 Стек на прототипах ( двух-связанный)](https://youtu.be/9KvA4hDDSjk?t=1268) -- [00:28:17 Стек на классах (односвязный)](https://youtu.be/9KvA4hDDSjk?t=1697) -- [00:29:55 Очередь](https://youtu.be/9KvA4hDDSjk?t=1795) -- [00:34:26 Дэк](https://youtu.be/9KvA4hDDSjk?t=2066) +- [00:00:00 Идея структуры данных](https://youtu.be/9KvA4hDDSjk?t=0) +- [00:02:27 Списки на прототипах ( абстракция элемента )](https://youtu.be/9KvA4hDDSjk?t=147) +- [00:06:23 Списки на объектах](https://youtu.be/9KvA4hDDSjk?t=383) +- [00:07:28 Списки на замыканиях](https://youtu.be/9KvA4hDDSjk?t=448) +- [00:10:56 Списки на объектах ( абстракция элемента и списка )](https://youtu.be/9KvA4hDDSjk?t=656) +- [00:18:22 Списки на классах](https://youtu.be/9KvA4hDDSjk?t=1102) +- [00:21:08 Стек на прототипах ( двух-связанный)](https://youtu.be/9KvA4hDDSjk?t=1268) +- [00:28:17 Стек на классах (односвязный)](https://youtu.be/9KvA4hDDSjk?t=1697) +- [00:29:55 Очередь](https://youtu.be/9KvA4hDDSjk?t=1795) +- [00:34:26 Дэк](https://youtu.be/9KvA4hDDSjk?t=2066) ## [Proxy и Symbol в JavaScript](https://youtu.be/UjZjSDyi9AM) -- [00:00:00 Определение Proxy](https://youtu.be/UjZjSDyi9AM?t=0) -- [00:01:20 Обращение к свойствам объекта, находящегося внутри proxy](https://youtu.be/UjZjSDyi9AM?t=80) -- [00:04:10 Доступ к состоянию объекта через Getter и Setter ](https://youtu.be/UjZjSDyi9AM?t=250) -- [00:05:13 Доступ к состоянию объекта через Proxy ](https://youtu.be/UjZjSDyi9AM?t=313) -- [00:07:40 Проверка наличие свойств ](https://youtu.be/UjZjSDyi9AM?t=460) -- [00:11:22 Удаление свойств](https://youtu.be/UjZjSDyi9AM?t=682) -- [00:13:26 Обращение к аргументам функции, находящегося внутри proxy ](https://youtu.be/UjZjSDyi9AM?t=806) -- [00:15:30 Другие Proxy обработчики (Proxy handler )](https://youtu.be/UjZjSDyi9AM?t=930) -- [00:19:00 Proxy.revocable ](https://youtu.be/UjZjSDyi9AM?t=1140) -- [00:20:43 Определение Symbol ](https://youtu.be/UjZjSDyi9AM?t=1243) -- [00:23:00 Вывод и сравнение Symbol ](https://youtu.be/UjZjSDyi9AM?t=1380) -- [00:25:10 Type](https://youtu.be/UjZjSDyi9AM?t=1510) -- [00:29:51 Symbol.for](https://youtu.be/UjZjSDyi9AM?t=1791) -- [00:34:45 Symbol.iterator ](https://youtu.be/UjZjSDyi9AM?t=2085) -- [00:43:52 Symbol.toPrimitive](https://youtu.be/UjZjSDyi9AM?t=2632) -- [00:47:00 hideSymbol](https://youtu.be/UjZjSDyi9AM?t=2820) +- [00:00:00 Определение Proxy](https://youtu.be/UjZjSDyi9AM?t=0) +- [00:01:20 Обращение к свойствам объекта, находящегося внутри proxy](https://youtu.be/UjZjSDyi9AM?t=80) +- [00:04:10 Доступ к состоянию объекта через Getter и Setter](https://youtu.be/UjZjSDyi9AM?t=250) +- [00:05:13 Доступ к состоянию объекта через Proxy](https://youtu.be/UjZjSDyi9AM?t=313) +- [00:07:40 Проверка наличие свойств](https://youtu.be/UjZjSDyi9AM?t=460) +- [00:11:22 Удаление свойств](https://youtu.be/UjZjSDyi9AM?t=682) +- [00:13:26 Обращение к аргументам функции, находящегося внутри proxy](https://youtu.be/UjZjSDyi9AM?t=806) +- [00:15:30 Другие Proxy обработчики (Proxy handler )](https://youtu.be/UjZjSDyi9AM?t=930) +- [00:19:00 Proxy.revocable](https://youtu.be/UjZjSDyi9AM?t=1140) +- [00:20:43 Определение Symbol](https://youtu.be/UjZjSDyi9AM?t=1243) +- [00:23:00 Вывод и сравнение Symbol](https://youtu.be/UjZjSDyi9AM?t=1380) +- [00:25:10 Type](https://youtu.be/UjZjSDyi9AM?t=1510) +- [00:29:51 Symbol.for](https://youtu.be/UjZjSDyi9AM?t=1791) +- [00:34:45 Symbol.iterator](https://youtu.be/UjZjSDyi9AM?t=2085) +- [00:43:52 Symbol.toPrimitive](https://youtu.be/UjZjSDyi9AM?t=2632) +- [00:47:00 hideSymbol](https://youtu.be/UjZjSDyi9AM?t=2820) ## [Сериализация и десериализация в JavaScript и Node.js](https://youtu.be/GtKPniOEzh8) -- [00:00:00 Введение ](https://youtu.be/GtKPniOEzh8?t=0) -- [00:01:50 Виды сериализации ](https://youtu.be/GtKPniOEzh8?t=110) -- [00:02:45 Сериализатор console.dir ](https://youtu.be/GtKPniOEzh8?t=165) -- [00:03:45 Cериализатор CSV](https://youtu.be/GtKPniOEzh8?t=225) -- [00:05:42 Сериализатор JSON ](https://youtu.be/GtKPniOEzh8?t=342) -- [00:10:00 Сериализатор функции](https://youtu.be/GtKPniOEzh8?t=600) -- [00:15:25 Сериализатор функции разных типов (расширяемый)](https://youtu.be/GtKPniOEzh8?t=925) -- [00:23:06 Десереализация ](https://youtu.be/GtKPniOEzh8?t=1386) -- [00:25:26 Сериализация объекта в бинарный формат, с помощью библиотеки v8 ](https://youtu.be/GtKPniOEzh8?t=1526) -- [00:28:26 Сериализация объекта, с помощью разных библиотек](https://youtu.be/GtKPniOEzh8?t=1706) +- [00:00:00 Введение](https://youtu.be/GtKPniOEzh8?t=0) +- [00:01:50 Виды сериализации](https://youtu.be/GtKPniOEzh8?t=110) +- [00:02:45 Сериализатор console.dir](https://youtu.be/GtKPniOEzh8?t=165) +- [00:03:45 Cериализатор CSV](https://youtu.be/GtKPniOEzh8?t=225) +- [00:05:42 Сериализатор JSON](https://youtu.be/GtKPniOEzh8?t=342) +- [00:10:00 Сериализатор функции](https://youtu.be/GtKPniOEzh8?t=600) +- [00:15:25 Сериализатор функции разных типов (расширяемый)](https://youtu.be/GtKPniOEzh8?t=925) +- [00:23:06 Десереализация](https://youtu.be/GtKPniOEzh8?t=1386) +- [00:25:26 Сериализация объекта в бинарный формат, с помощью библиотеки v8](https://youtu.be/GtKPniOEzh8?t=1526) +- [00:28:26 Сериализация объекта, с помощью разных библиотек](https://youtu.be/GtKPniOEzh8?t=1706) ## [Асинхронность с библиотекой async.js](https://youtu.be/XQ94wQc-erU) + ## [Фабрики и пулы объектов в JavaScript, factorify, poolify](https://youtu.be/Ax_mSvadFp8) -- [00:00:00 Введение ](https://youtu.be/Ax_mSvadFp8?t=0) -- [00:02:38 Фабрика ( factory )](https://youtu.be/Ax_mSvadFp8?t=158) -- [00:05:44 Фабрика прототипов ](https://youtu.be/Ax_mSvadFp8?t=344) -- [00:10:48 Фабрика классов ](https://youtu.be/Ax_mSvadFp8?t=648) -- [00:12:28 Фабрика функций ](https://youtu.be/Ax_mSvadFp8?t=748) -- [00:15:55 Фабричные методы ](https://youtu.be/Ax_mSvadFp8?t=955) -- [00:16:55 Превращение функций в фабрику ( factorify)](https://youtu.be/Ax_mSvadFp8?t=1015) -- [00:19:44 Пул ( pool )](https://youtu.be/Ax_mSvadFp8?t=1184) -- [00:23:05 Работа с пулом ](https://youtu.be/Ax_mSvadFp8?t=1385) -- [00:23:04 Обобщенный пул](https://youtu.be/Ax_mSvadFp8?t=1384) -- [00:24:55 Пулифицирование фабрики ( poolify ) ](https://youtu.be/Ax_mSvadFp8?t=1495) -- [00:28:50 Улучшенная пулифицированная фабрика ](https://youtu.be/Ax_mSvadFp8?t=1730) -- [00:32:10 Асинхронная работа с пулом ](https://youtu.be/Ax_mSvadFp8?t=1930) -- [00:45:25 Одновременное использование factorify и poolify ](https://youtu.be/Ax_mSvadFp8?t=2725) -- [00:51:54 Обобщение](https://youtu.be/Ax_mSvadFp8?t=3114) +- [00:00:00 Введение](https://youtu.be/Ax_mSvadFp8?t=0) +- [00:02:38 Фабрика ( factory )](https://youtu.be/Ax_mSvadFp8?t=158) +- [00:05:44 Фабрика прототипов](https://youtu.be/Ax_mSvadFp8?t=344) +- [00:10:48 Фабрика классов](https://youtu.be/Ax_mSvadFp8?t=648) +- [00:12:28 Фабрика функций](https://youtu.be/Ax_mSvadFp8?t=748) +- [00:15:55 Фабричные методы](https://youtu.be/Ax_mSvadFp8?t=955) +- [00:16:55 Превращение функций в фабрику ( factorify)](https://youtu.be/Ax_mSvadFp8?t=1015) +- [00:19:44 Пул ( pool )](https://youtu.be/Ax_mSvadFp8?t=1184) +- [00:23:05 Работа с пулом](https://youtu.be/Ax_mSvadFp8?t=1385) +- [00:23:04 Обобщенный пул](https://youtu.be/Ax_mSvadFp8?t=1384) +- [00:24:55 Пулифицирование фабрики ( poolify )](https://youtu.be/Ax_mSvadFp8?t=1495) +- [00:28:50 Улучшеная пулифицированная фабрика](https://youtu.be/Ax_mSvadFp8?t=1730) +- [00:32:10 Ассинхронная работа с пулом](https://youtu.be/Ax_mSvadFp8?t=1930) +- [00:45:25 Одновременное использование factorify и poolify](https://youtu.be/Ax_mSvadFp8?t=2725) +- [00:51:54 Обобщение](https://youtu.be/Ax_mSvadFp8?t=3114) ## [Подход к изучению программирования (выступление на дне факультета Информатики КПИ 12 декабря 2018)](https://youtu.be/zMU4ir10DMg) -- [00:40 Что нужно знать?](https://youtu.be/zMU4ir10DMg?t=40) -- [03:41 Откуда брать знания ](https://youtu.be/zMU4ir10DMg?t=221) -- [07:39 Проблемы отрасли ](https://youtu.be/zMU4ir10DMg?t=459) -- [13:12 Дерево парадигм ](https://youtu.be/zMU4ir10DMg?t=792) -- [14:15 Технологии и техники](https://youtu.be/zMU4ir10DMg?t=855) -- [14:32 Разница парадигм](https://youtu.be/zMU4ir10DMg?t=872) -- [14:48 Что общего в парадигмах](https://youtu.be/zMU4ir10DMg?t=888) -- [15:33 Прочие парадигмы и техники](https://youtu.be/zMU4ir10DMg?t=933) -- [17:46 Мультипарадигменность](https://youtu.be/zMU4ir10DMg?t=1066) -- [18:46 Метапрограммирование](https://youtu.be/zMU4ir10DMg?t=1126) -- [19:13 Как не деградировать?](https://youtu.be/zMU4ir10DMg?t=1153) -- [21:29 Как найти общий язык? ](https://youtu.be/zMU4ir10DMg?t=1289) -- [24:31 Задачи программной инженерии](https://youtu.be/zMU4ir10DMg?t=1471) -- [28:19 Преодоление сложности ](https://youtu.be/zMU4ir10DMg?t=1699) -- [28:21 Связывание данных и логики](https://youtu.be/zMU4ir10DMg?t=1701) -- [28:30 Различные концепции ](https://youtu.be/zMU4ir10DMg?t=1710) -- [29:40 ВУЗ должен меняться](https://youtu.be/zMU4ir10DMg?t=1780) -- [33:53 Неспециальные предметы](https://youtu.be/zMU4ir10DMg?t=2033) -- [35:18 Чего не хватает](https://youtu.be/zMU4ir10DMg?t=2118) -- [36:57 Проблем много ](https://youtu.be/zMU4ir10DMg?t=2217) -- [40:20 ВУЗ должен знать](https://youtu.be/zMU4ir10DMg?t=2420) +- [00:40 Что нужно знать?](https://youtu.be/zMU4ir10DMg?t=40) +- [03:41 Откуда брать знания](https://youtu.be/zMU4ir10DMg?t=221) +- [07:39 Проблемы отрасли](https://youtu.be/zMU4ir10DMg?t=459) +- [13:12 Дерево парадигм](https://youtu.be/zMU4ir10DMg?t=792) +- [14:15 Технологии и техники](https://youtu.be/zMU4ir10DMg?t=855) +- [14:32 Разница парадигм](https://youtu.be/zMU4ir10DMg?t=872) +- [14:48 Что общего в парадигмах](https://youtu.be/zMU4ir10DMg?t=888) +- [15:33 Прочие парадигмы и техники](https://youtu.be/zMU4ir10DMg?t=933) +- [17:46 Мультипарадигменность](https://youtu.be/zMU4ir10DMg?t=1066) +- [18:46 Метапрограммирование](https://youtu.be/zMU4ir10DMg?t=1126) +- [19:13 Как не деградировать?](https://youtu.be/zMU4ir10DMg?t=1153) +- [21:29 Как найти общий язык?](https://youtu.be/zMU4ir10DMg?t=1289) +- [24:31 Задачи программной инженерии](https://youtu.be/zMU4ir10DMg?t=1471) +- [28:19 Преодоление сложности](https://youtu.be/zMU4ir10DMg?t=1699) +- [28:21 Связывание данных и логики](https://youtu.be/zMU4ir10DMg?t=1701) +- [28:30 Различные концепции](https://youtu.be/zMU4ir10DMg?t=1710) +- [29:40 ВУЗ должен меняться](https://youtu.be/zMU4ir10DMg?t=1780) +- [33:53 Неспециальные предметы](https://youtu.be/zMU4ir10DMg?t=2033) +- [35:18 Чего не хватает](https://youtu.be/zMU4ir10DMg?t=2118) +- [36:57 Проблем много](https://youtu.be/zMU4ir10DMg?t=2217) +- [40:20 ВУЗ должен знать](https://youtu.be/zMU4ir10DMg?t=2420) ## [Асинхронность на промисах, Promise, all, then, catch, race](https://youtu.be/RMl4r6s1Y8M) + ## [Типизированные массивы в JavaScript](https://youtu.be/tTNcqxbxhfY) + ## [Шаблон Singleton (синглтон) в JavaScript](https://youtu.be/qdJ5yikZnfE) -- [00:00:00 Singleton через конструктор прототипа](https://youtu.be/qdJ5yikZnfE?t=0) -- [00:03:27 Singleton через замыкания ](https://youtu.be/qdJ5yikZnfE?t=207) -- [00:06:10 Пример singleton через замыкания ](https://youtu.be/qdJ5yikZnfE?t=370) -- [00:08:15 Пример singleton через замыкания в функциональном стиле ](https://youtu.be/qdJ5yikZnfE?t=495) -- [00:09:23 Пример singleton через замыкания в функциональном стиле (упрощенный) ](https://youtu.be/qdJ5yikZnfE?t=563) -- [00:10:32 Создание singleton в JS](https://youtu.be/qdJ5yikZnfE?t=632) +- [00:00:00 Singleton через конструктор прототипа](https://youtu.be/qdJ5yikZnfE?t=0) +- [00:03:27 Singleton через замыкания](https://youtu.be/qdJ5yikZnfE?t=207) +- [00:06:10 Пример singleton через замыкания](https://youtu.be/qdJ5yikZnfE?t=370) +- [00:08:15 Пример singleton через замыкания в функциональном стиле](https://youtu.be/qdJ5yikZnfE?t=495) +- [00:09:23 Пример singleton через замыкания в функциональном стиле (упрощенный)](https://youtu.be/qdJ5yikZnfE?t=563) +- [00:10:32 Создание singleton в JS](https://youtu.be/qdJ5yikZnfE?t=632) ## [Функциональные объекты, функторы и монады в JavaScript](https://youtu.be/3Z7f0Gi8pxw) -- [00:00:00 Определение функтора ](https://youtu.be/3Z7f0Gi8pxw?t=0) -- [00:01:40 Функтор из прототипа ](https://youtu.be/3Z7f0Gi8pxw?t=100) -- [00:08:17 Функтор из прототипа (упрощенный) ](https://youtu.be/3Z7f0Gi8pxw?t=497) -- [00:09:14 Функтор из замыкания ](https://youtu.be/3Z7f0Gi8pxw?t=554) -- [00:11:49 Функтор из замыкания с тернарным оператором](https://youtu.be/3Z7f0Gi8pxw?t=709) -- [00:12:44 Аппликативный функтор из прототипа ](https://youtu.be/3Z7f0Gi8pxw?t=764) -- [00:18:08 Аппликативный функтор из замыкания (монада)](https://youtu.be/3Z7f0Gi8pxw?t=1088) -- [00:23:11 Пример применения монады ](https://youtu.be/3Z7f0Gi8pxw?t=1391) -- [00:28:37 Функциональный объект ](https://youtu.be/3Z7f0Gi8pxw?t=1717) -- [00:39:44 Пример применения функционального объекта](https://youtu.be/3Z7f0Gi8pxw?t=2384) -- [00:45:27 Обобщение](https://youtu.be/3Z7f0Gi8pxw?t=2727) +- [00:00:00 Определение функтора](https://youtu.be/3Z7f0Gi8pxw?t=0) +- [00:01:40 Функтор из прототипа](https://youtu.be/3Z7f0Gi8pxw?t=100) +- [00:08:17 Функтор из прототипа (упрощенный)](https://youtu.be/3Z7f0Gi8pxw?t=497) +- [00:09:14 Функтор из замыкания](https://youtu.be/3Z7f0Gi8pxw?t=554) +- [00:11:49 Функтор из замыкания с тернарным оператором](https://youtu.be/3Z7f0Gi8pxw?t=709) +- [00:12:44 Аппликативный функтор из прототипа](https://youtu.be/3Z7f0Gi8pxw?t=764) +- [00:18:08 Аппликативный функтор из замыкания (монада)](https://youtu.be/3Z7f0Gi8pxw?t=1088) +- [00:23:11 Пример применения монады](https://youtu.be/3Z7f0Gi8pxw?t=1391) +- [00:28:37 Функциональный объект](https://youtu.be/3Z7f0Gi8pxw?t=1717) +- [00:39:44 Пример применения функционального объекта](https://youtu.be/3Z7f0Gi8pxw?t=2384) +- [00:45:27 Обобщение](https://youtu.be/3Z7f0Gi8pxw?t=2727) ## [Асинхронные функции, async/await, thenable, обработка ошибок](https://youtu.be/Jdf_tZuJbHI) + ## [Асинхронные адаптеры: promisify, callbackify, asyncify...](https://youtu.be/76k6_YkYRmU) + ## [Асинхронные коллекторы данных](https://youtu.be/tgodt1JL6II) + ## [Утечки памяти в Node.js и JavaScript, сборка мусора и профилирование](https://youtu.be/0oZa64SB2wM) + ## [Рекурсия: косвенная и хвостовая, стек, выход](https://youtu.be/W2skCjIgVKE) -- [00:00 Рекурсивная функция для вычисления глубины стека](https://youtu.be/W2skCjIgVKE?t=0) -- [03:25 Неявная рекурсия](https://youtu.be/W2skCjIgVKE?t=205) -- [04:52 Рекурсивная функция для вычисления степени числа](https://youtu.be/W2skCjIgVKE?t=292) -- [06:12 Рекурсивная функция для вычисления факториала ](https://youtu.be/W2skCjIgVKE?t=372) -- [06:29 Рекурсивная функция для вычисления числа Фибоначчи ](https://youtu.be/W2skCjIgVKE?t=389) -- [09:27 Рекурсивная функция, как аналог функции reduce ](https://youtu.be/W2skCjIgVKE?t=567) -- [12:04 Оптимизация хвостовой рекурсии ](https://youtu.be/W2skCjIgVKE?t=724) -- [15:41 Оптимизация обычной рекурсивной функции](https://youtu.be/W2skCjIgVKE?t=941) +- [00:00 Рекурсивная функция для вычисления глубины стека](https://youtu.be/W2skCjIgVKE?t=0) +- [03:25 Неявная рекурсия](https://youtu.be/W2skCjIgVKE?t=205) +- [04:52 Рекурсивная функция для вычисления степени числа](https://youtu.be/W2skCjIgVKE?t=292) +- [06:12 Рекурсивная функция для вычисления факториала](https://youtu.be/W2skCjIgVKE?t=372) +- [06:29 Рекурсивная функция для вычисления числа Фибоначчи](https://youtu.be/W2skCjIgVKE?t=389) +- [09:27 Рекурсивная функция, как аналог функции reduce](https://youtu.be/W2skCjIgVKE?t=567) +- [12:04 Оптимизация хвостовой рекурсии](https://youtu.be/W2skCjIgVKE?t=724) +- [15:41 Оптимизация обычной рекурсивной функции](https://youtu.be/W2skCjIgVKE?t=941) ## [Дженерики и обобщенное программирование](https://youtu.be/r6W2z3DQhoI) + ## [Генераторы и асинхронные генераторы в JavaScript](https://youtu.be/kvNm9D32s8s) -- [00:00 Способы объявления генераторов ](https://youtu.be/kvNm9D32s8s?t=0) -- [10:41 Пример генератора с yield ](https://youtu.be/kvNm9D32s8s?t=641) -- [15:54 Пример генератора с yield и return ](https://youtu.be/kvNm9D32s8s?t=954) -- [18:47 Получение значений из генератора циклом for...of ](https://youtu.be/kvNm9D32s8s?t=1127) -- [21:04 Получение значений из генератора spead - оператором ](https://youtu.be/kvNm9D32s8s?t=1264) -- [21:50 Метод next ](https://youtu.be/kvNm9D32s8s?t=1310) -- [23:30 Пример генератора с yield * возвращающего итерируемые объекты ](https://youtu.be/kvNm9D32s8s?t=1410) -- [25:05 Пример генератора с yield * возвращающего другие генераторы ](https://youtu.be/kvNm9D32s8s?t=1505) -- [26:18 Метод return ](https://youtu.be/kvNm9D32s8s?t=1578) +- [00:00 Способы объявления генераторов](https://youtu.be/kvNm9D32s8s?t=0) +- [10:41 Пример генератора с yield](https://youtu.be/kvNm9D32s8s?t=641) +- [15:54 Пример генератора с yield и return](https://youtu.be/kvNm9D32s8s?t=954) +- [18:47 Получение значений из генератора циклом for...of](https://youtu.be/kvNm9D32s8s?t=1127) +- [21:04 Получение значений из генератора spead - оператором](https://youtu.be/kvNm9D32s8s?t=1264) +- [21:50 Метод next](https://youtu.be/kvNm9D32s8s?t=1310) +- [23:30 Пример генератора с yield * возвращающего итерируемые объекты](https://youtu.be/kvNm9D32s8s?t=1410) +- [25:05 Пример генератора с yield * возвращающего другие генераторы](https://youtu.be/kvNm9D32s8s?t=1505) +- [26:18 Метод return](https://youtu.be/kvNm9D32s8s?t=1578) - [28:11 Метод throw](https://youtu.be/kvNm9D32s8s?t=1691) - [29:05 Обобщение](https://youtu.be/kvNm9D32s8s?t=1745) ## [Итераторы и асинхронные итераторы в JavaScript](https://youtu.be/rBGFlWpVpGs) + ## [Фасад - петтерн для скрытия сложности](https://youtu.be/oJtBO7CystE) + ## [Адаптер (Adapter) - паттерн достижения совместимости](https://youtu.be/cA65McLQrR8) - [0:00 введение](https://youtu.be/cA65McLQrR8?t=0) - [1:30 adapter на prototype](https://youtu.be/cA65McLQrR8?t=90) - [3:57 adapter на class](https://youtu.be/cA65McLQrR8?t=237) - [4:23 adapter на function](https://youtu.be/cA65McLQrR8?t=263) -- [6:15 adapter на классе-обертке (boxing)](https://youtu.be/cA65McLQrR8?t=375) +- [6:15 adapter на классе-обертке (boxing)](https://youtu.be/cA65McLQrR8?t=375) - [7:08 adapter на замыканиях (closure)](https://youtu.be/cA65McLQrR8?t=428) - [8:10 adapter на interface](https://youtu.be/cA65McLQrR8?t=490) - [13:45 adapter на events](https://youtu.be/cA65McLQrR8?t=825) @@ -720,73 +750,90 @@ ## [Линзы в JavaScript - функциональные аналоги геттера и сеттера](https://youtu.be/IBF5gFU6G-o) + ## [Перечислимый тип (enum) в JavaScript и TypeScript](https://youtu.be/BXiKebOIAGI) + ## [Графы и запросы к графовым структурам на JavaScript](https://youtu.be/a0W0T8Yqw3s) + ## [Паттерн Команда (Command) действие и параметры как объект](https://youtu.be/vER0vYL4hM4) + ## [Тестирование: юниттесты с примерами на JavaScript](https://youtu.be/CszugIag2TA) + ## [Инверсия управления и внедрение зависимостей в Node.js](https://youtu.be/Fz86Fdjz-LM) + ## [Слои, связанность и связность кода в JavaScript](https://youtu.be/A3RpwNlVeyY) + ## [Измерение производительности кода и оптимизация в JavaScript и Node.js](https://youtu.be/sanq2X7Re8o) -- [00:00:00 Введение ](https://youtu.be/sanq2X7Re8o?t=0) -- [00:05:27 Console.time и console.timeEnd ](https://youtu.be/sanq2X7Re8o?t=327) -- [00:09:05 New Date( ).getTime( ) ](https://youtu.be/sanq2X7Re8o?t=545) -- [00:11:15 Process.hrtime( )](https://youtu.be/sanq2X7Re8o?t=675) -- [00:18:51 Process.hrtime.bigint( ) и движок для benchmark](https://youtu.be/sanq2X7Re8o?t=1131) -- [00:27:00 Сравнение функций инстанцирования ](https://youtu.be/sanq2X7Re8o?t=1620) -- [00:31:06 Алгоритм для сравнения ](https://youtu.be/sanq2X7Re8o?t=1866) -- [00:39:36 Работа движка benchmark ](https://youtu.be/sanq2X7Re8o?t=2376) -- [00:41:37 Результаты теста](https://youtu.be/sanq2X7Re8o?t=2497) -- [00:47:33 Сравнение массива и объектов ](https://youtu.be/sanq2X7Re8o?t=2853) -- [00:54:21 Результаты теста ](https://youtu.be/sanq2X7Re8o?t=3261) -- [00:55:00 Сравнение 3 функций range ](https://youtu.be/sanq2X7Re8o?t=3300) -- [00:56:34 Результаты теста ](https://youtu.be/sanq2X7Re8o?t=3394) -- [00:58:50 Сравнение функций по способу вызова](https://youtu.be/sanq2X7Re8o?t=3530) -- [00:59:56 Результаты теста](https://youtu.be/sanq2X7Re8o?t=3596) -- [01:01:34 Сравнение indexOf и includes](https://youtu.be/sanq2X7Re8o?t=3694) -- [01:01:54 Результаты теста ](https://youtu.be/sanq2X7Re8o?t=3714) -- [01:03:23 Сравнение объявления переменной до и после цикла ](https://youtu.be/sanq2X7Re8o?t=3803) -- [01:05:02 Сравнение for keys, for (...in...) и for (...of...)](https://youtu.be/sanq2X7Re8o?t=3902) -- [01:05:34 Результаты теста ](https://youtu.be/sanq2X7Re8o?t=3934) -- [01:05:58 Сравнение шаблонных строк](https://youtu.be/sanq2X7Re8o?t=3958) -- [01:06:12 Сравнение хождения цикла по функции map в ES6](https://youtu.be/sanq2X7Re8o?t=3972) -- [01:07:18 Результаты теста ](https://youtu.be/sanq2X7Re8o?t=4038) -- [01:07:56 Сравнение repeat и arrayJoin ](https://youtu.be/sanq2X7Re8o?t=4076) -- [01:08:15 Результаты теста](https://youtu.be/sanq2X7Re8o?t=4095) -- [01:08:26 Сравнение дублирования массива ](https://youtu.be/sanq2X7Re8o?t=4106) -- [01:08:58 Результаты теста](https://youtu.be/sanq2X7Re8o?t=4138) -- [01:09:43 Сравнение копирование набора данных ](https://youtu.be/sanq2X7Re8o?t=4183) -- [01:10:26 Результаты теста ](https://youtu.be/sanq2X7Re8o?t=4226) -- [01:10:47 Сравнение итерирования с помощью forEarch и for (...of...)](https://youtu.be/sanq2X7Re8o?t=4247) -- [01:11:08 Результаты теста](https://youtu.be/sanq2X7Re8o?t=4268) -- [01:11:31 Обобщение](https://youtu.be/sanq2X7Re8o?t=4291) +- [00:00:00 Введение](https://youtu.be/sanq2X7Re8o?t=0) +- [00:05:27 Console.time и console.timeEnd](https://youtu.be/sanq2X7Re8o?t=327) +- [00:09:05 New Date( ).getTime( )](https://youtu.be/sanq2X7Re8o?t=545) +- [00:11:15 Process.hrtime( )](https://youtu.be/sanq2X7Re8o?t=675) +- [00:18:51 Process.hrtime.bigint( ) и движок для benchmark](https://youtu.be/sanq2X7Re8o?t=1131) +- [00:27:00 Сравнение функций инстанцирования](https://youtu.be/sanq2X7Re8o?t=1620) +- [00:31:06 Алгоритм для сравнения](https://youtu.be/sanq2X7Re8o?t=1866) +- [00:39:36 Работа движка benchmark](https://youtu.be/sanq2X7Re8o?t=2376) +- [00:41:37 Результаты теста](https://youtu.be/sanq2X7Re8o?t=2497) +- [00:47:33 Сравнение массива и объектов](https://youtu.be/sanq2X7Re8o?t=2853) +- [00:54:21 Результаты теста](https://youtu.be/sanq2X7Re8o?t=3261) +- [00:55:00 Сравнение 3 функций range](https://youtu.be/sanq2X7Re8o?t=3300) +- [00:56:34 Результаты теста](https://youtu.be/sanq2X7Re8o?t=3394) +- [00:58:50 Сравнение функций по способу вызова](https://youtu.be/sanq2X7Re8o?t=3530) +- [00:59:56 Результаты теста](https://youtu.be/sanq2X7Re8o?t=3596) +- [01:01:34 Сравнение indexOf и includes](https://youtu.be/sanq2X7Re8o?t=3694) +- [01:01:54 Результаты теста](https://youtu.be/sanq2X7Re8o?t=3714) +- [01:03:23 Сравнение объявления переменной до и после цикла](https://youtu.be/sanq2X7Re8o?t=3803) +- [01:05:02 Сравнение for keys, for (...in...) и for (...of...)](https://youtu.be/sanq2X7Re8o?t=3902) +- [01:05:34 Результаты теста](https://youtu.be/sanq2X7Re8o?t=3934) +- [01:05:58 Сравнение шаблонных строк](https://youtu.be/sanq2X7Re8o?t=3958) +- [01:06:12 Сравнение хождения цикла по функции map в ES6](https://youtu.be/sanq2X7Re8o?t=3972) +- [01:07:18 Результаты теста](https://youtu.be/sanq2X7Re8o?t=4038) +- [01:07:56 Сравнение repeat и arrayJoin](https://youtu.be/sanq2X7Re8o?t=4076) +- [01:08:15 Результаты теста](https://youtu.be/sanq2X7Re8o?t=4095) +- [01:08:26 Сравнение дублирования массива](https://youtu.be/sanq2X7Re8o?t=4106) +- [01:08:58 Результаты теста](https://youtu.be/sanq2X7Re8o?t=4138) +- [01:09:43 Сравнение копирование набора данных](https://youtu.be/sanq2X7Re8o?t=4183) +- [01:10:26 Результаты теста](https://youtu.be/sanq2X7Re8o?t=4226) +- [01:10:47 Сравнение итерирования с помощью forEarch и for (...of...)](https://youtu.be/sanq2X7Re8o?t=4247) +- [01:11:08 Результаты теста](https://youtu.be/sanq2X7Re8o?t=4268) +- [01:11:31 Обобщение](https://youtu.be/sanq2X7Re8o?t=4291) ## [Слой доступа к данным, курсор, транзакция](https://youtu.be/CRcSWtWVvrA) + ## [HTTP запросы в браузере и Node.js: XMLHttpRequest, fetch](https://youtu.be/wMMki2FEYGY) + ## [Метапрограммирование с примерами на JavaScript](https://youtu.be/Ed9onRv4G5Y) + ## [Тестирование: системное и интеграционное тестирование на JavaScript](https://youtu.be/OuKu_6H_6gE) + ## [Отмена асинхронных операций, cancellable callback and Promise в JavaScript](https://youtu.be/T8fXlnqI4Ws) + ## [Асинхронная композиция функций на JavaScript](https://youtu.be/3ZCrMlMpOrM) + ## [Thenable и легковесный await в JavaScript](https://youtu.be/DXp__1VNIvI) + ## [Конкурентная асинхронная очередь на JavaScript](https://youtu.be/Lg46AH8wFvg) + ## [Паттерн Revealing Constructor - открытый конструктор](https://youtu.be/leR5sXRkuJI) + ## [Модель акторов для параллельных вычислений](https://youtu.be/xp5MVKEqxY4) + ## [Have Objects Failed? Или что не так с ООП?](https://youtu.be/4yO5OS0vPSw) - [1:46 Присвоенные идеи ООП](https://youtu.be/4yO5OS0vPSw?t=106) @@ -799,6 +846,7 @@ ## [Интроспекция и рефлексия в JavaScript](https://youtu.be/yvW1PjUVeM0) + ## [История развития языков программирования](https://youtu.be/qqz0VSaNxuw) - [0:00:02 введение](https://youtu.be/qqz0VSaNxuw?t=2) @@ -819,7 +867,8 @@ - [0:23:37 Java](https://youtu.be/qqz0VSaNxuw?t=1417) - [0:25:45 Delphi](https://youtu.be/qqz0VSaNxuw?t=1545) - [0:28:43 SQL](https://youtu.be/qqz0VSaNxuw?t=1723) -- [0:30:43 PHP 0:41:17 стрелочку из плюсов взяли](https://youtu.be/qqz0VSaNxuw?t=1843) +- [0:30:43 PHP](https://youtu.be/qqz0VSaNxuw?t=1843) +- [0:41:17 стрелочку из плюсов взяли](https://youtu.be/qqz0VSaNxuw?t=2477) - [0:33:14 C#](https://youtu.be/qqz0VSaNxuw?t=1994) - [0:35:20 Go](https://youtu.be/qqz0VSaNxuw?t=2120) - [0:36:17 Rust](https://youtu.be/qqz0VSaNxuw?t=2177) @@ -870,45 +919,48 @@ ## [Примеси, обертки, декораторы, мемоизация](https://youtu.be/2h9syXN5wO0) -- [00:00:00 Синхронная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=0) -- [00:02:55 Синхронная универсальная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=175) -- [00:08:28 Асинхронная универсальная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=508) -- [00:15:50 Синхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/2h9syXN5wO0?t=950) -- [00:22:45 Асинхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/2h9syXN5wO0?t=1365) -- [00:25:38 Функция-обертка, которая ограничивает вызов функции до одного вызова (once) ](https://youtu.be/2h9syXN5wO0?t=1538) -- [00:27:36 Функция-обертка, которая ограничивает вызов функции до n-го вызова (limit)](https://youtu.be/2h9syXN5wO0?t=1656) -- [00:29:50 Функция-обертка, которая отменяет вызов функции (cancel)](https://youtu.be/2h9syXN5wO0?t=1790) -- [00:32:29 Функция-обертка с методами timeout, limit, cancel](https://youtu.be/2h9syXN5wO0?t=1949) -- [00:39:03 Функция-обертка с методами timeout, limit, cancel (оптимизированная)](https://youtu.be/2h9syXN5wO0?t=2343) -- [00:42:28 Функция-обертка, которая ограничивает один вызов за 200 мс (throttle)](https://youtu.be/2h9syXN5wO0?t=2548) -- [00:45:47 Примесь поля через точку ](https://youtu.be/2h9syXN5wO0?t=2747) -- [00:51:35 Примесь поля через функцию extend](https://youtu.be/2h9syXN5wO0?t=3095) -- [00:57:35 Примесь поля через object.assign( )](https://youtu.be/2h9syXN5wO0?t=3455) -- [00:59:18 Примесь поведения ](https://youtu.be/2h9syXN5wO0?t=3558) -- [01:02:23 Примесь изменения класса](https://youtu.be/2h9syXN5wO0?t=3743) -- [01:06:50 Определение](https://youtu.be/2h9syXN5wO0?t=4010) -- [01:07:30 Реализация простой мемоизации ](https://youtu.be/2h9syXN5wO0?t=4050) -- [01:14:43 Реализация простой мемоизации с проверкой скорости ](https://youtu.be/2h9syXN5wO0?t=4483) -- [01:20:43 Удаление накопленного кэша ](https://youtu.be/2h9syXN5wO0?t=4843) -- [01:25:35 Асинхронная мемоизация ](https://youtu.be/2h9syXN5wO0?t=5135) -- [01:31:10 Преобразование аргументов и ключей в hash-функцию](https://youtu.be/2h9syXN5wO0?t=5470) -- [01:33:32 Реализация сложной мемоизации](https://youtu.be/2h9syXN5wO0?t=5612) +- [00:00:00 Синхронная функция-обертка](https://youtu.be/2h9syXN5wO0?t=0) +- [00:02:55 Синхронная универсальная функция-обертка](https://youtu.be/2h9syXN5wO0?t=175) +- [00:08:28 Асинхронная универсальная функция-обертка](https://youtu.be/2h9syXN5wO0?t=508) +- [00:15:50 Синхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/2h9syXN5wO0?t=950) +- [00:22:45 Асинхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/2h9syXN5wO0?t=1365) +- [00:25:38 Функция-обертка, которая ограничивает вызов функции до одного вызова (once)](https://youtu.be/2h9syXN5wO0?t=1538) +- [00:27:36 Функция-обертка, которая ограничивает вызов функции до n-го вызова (limit)](https://youtu.be/2h9syXN5wO0?t=1656) +- [00:29:50 Функция-обертка, которая отменяет вызов функции (cancel)](https://youtu.be/2h9syXN5wO0?t=1790) +- [00:32:29 Функция-обертка с методами timeout, limit, cancel](https://youtu.be/2h9syXN5wO0?t=1949) +- [00:39:03 Функция-обертка с методами timeout, limit, cancel (оптимизированная)](https://youtu.be/2h9syXN5wO0?t=2343) +- [00:42:28 Функция-обертка, которая ограничивает один вызов за 200 мс (throttle)](https://youtu.be/2h9syXN5wO0?t=2548) +- [00:45:47 Примесь поля через точку](https://youtu.be/2h9syXN5wO0?t=2747) +- [00:51:35 Примесь поля через функцию extend](https://youtu.be/2h9syXN5wO0?t=3095) +- [00:57:35 Примесь поля через object.assign( )](https://youtu.be/2h9syXN5wO0?t=3455) +- [00:59:18 Примесь поведения](https://youtu.be/2h9syXN5wO0?t=3558) +- [01:02:23 Примесь изменения класса](https://youtu.be/2h9syXN5wO0?t=3743) +- [01:06:50 Определение](https://youtu.be/2h9syXN5wO0?t=4010) +- [01:07:30 Реализация простой мемоизации](https://youtu.be/2h9syXN5wO0?t=4050) +- [01:14:43 Реализация простой мемоизации с проверкой скорости](https://youtu.be/2h9syXN5wO0?t=4483) +- [01:20:43 Удаление накопленного кэша](https://youtu.be/2h9syXN5wO0?t=4843) +- [01:25:35 Асинхронная мемоизация](https://youtu.be/2h9syXN5wO0?t=5135) +- [01:31:10 Преобразование аргументов и ключей в hash-функцию](https://youtu.be/2h9syXN5wO0?t=5470) +- [01:33:32 Реализация сложной мемоизации](https://youtu.be/2h9syXN5wO0?t=5612) ## [Ответы на вопросы по курсу "Основы программирования" 2019-2020](https://youtu.be/TY6nDW7aYys) + ## [Антипаттерны процедурного программирования](https://youtu.be/cTv7V22mkwE) + ## [Семинар: выполнение лабораторных работ на JavaSript по курсу "Основы программирования"](https://youtu.be/ikUOyFPzdJw) + ## [Массивы в JavaScript (методы Array)](https://youtu.be/D1kfYBkX9FE) - [00:00 Конструкция массива](https://youtu.be/D1kfYBkX9FE?t=0) - [09:58 Метод concat](https://youtu.be/D1kfYBkX9FE?t=598) -- [11:00 Методы every и some ](https://youtu.be/D1kfYBkX9FE?t=660) -- [13:00 Метод filter ](https://youtu.be/D1kfYBkX9FE?t=780) -- [13:29 Методы find и findIndex](https://youtu.be/D1kfYBkX9FE?t=809) -- [14:30 Метод flat ](https://youtu.be/D1kfYBkX9FE?t=870) -- [17:08 Метод includes ](https://youtu.be/D1kfYBkX9FE?t=1028) +- [11:00 Методы every и some](https://youtu.be/D1kfYBkX9FE?t=660) +- [13:00 Метод filter](https://youtu.be/D1kfYBkX9FE?t=780) +- [13:29 Методы find и findIndex](https://youtu.be/D1kfYBkX9FE?t=809) +- [14:30 Метод flat](https://youtu.be/D1kfYBkX9FE?t=870) +- [17:08 Метод includes](https://youtu.be/D1kfYBkX9FE?t=1028) - [17:32 Метод indexOf и lastIndexOf](https://youtu.be/D1kfYBkX9FE?t=1052) - [18:35 Метод join](https://youtu.be/D1kfYBkX9FE?t=1115) - [18:58 Метод reverse](https://youtu.be/D1kfYBkX9FE?t=1138) @@ -918,59 +970,74 @@ ## [Code Review: как это и зачем](https://youtu.be/EKL6NiIQ6ZU) + ## [Семинар: Code Review, ответы на вопросы](https://youtu.be/AgH4OAKbmkM) + ## [Мономорфный и полиморфный код, инлайн-кэш, скрытые классы в JavaScript](https://youtu.be/9JUY3prnCQ4) + ## [Ассоциация, агрегация и композиция объектов в JavaScript](https://youtu.be/tOIcBrzezK0) + ## [Рефакторинг: причины, цели, техники и процесс](https://youtu.be/z73wmpdweQ4) + ## [Принцип подстановки Барбары Лисков](https://youtu.be/RbhYxygxroc) + ## [Композиция функций (pipe, compose) в JavaScript](https://youtu.be/xS9FicVrOTI) + ## [Примеси в JavaScript: mixin, extend, Object.assign, class λ-mixin](https://youtu.be/NZMrJ2adEyY) + ## [Прототипное программирование и прототипное наследование в JavaScript](https://youtu.be/SzaXTW2qcJE) + ## [Мемоизация функций: memoize в JavaScript](https://youtu.be/H6S8QJo2Qxg) + ## [Функции-обертки: Wrappers в JavaScript](https://youtu.be/En7pWi2fSzs) + ## [Новое в JavaScript: ES.Next, ECMAScript 2020, ES11, ES10, ES9, ES8, ES7, ES6, ES2020, ES2019](https://youtu.be/fUjHLj8bq_Y) -- [00:00 ECMA Script versions](https://youtu.be/fUjHLj8bq_Y?t=0) -- [09:40 Array.proptotype.includes ](https://youtu.be/fUjHLj8bq_Y?t=580) -- [10:55 Array.proptotype.flat ](https://youtu.be/fUjHLj8bq_Y?t=655) -- [11:36 Array.proptotype.flatMap](https://youtu.be/fUjHLj8bq_Y?t=696) -- [12:20 Array.proptotype.sort](https://youtu.be/fUjHLj8bq_Y?t=740) -- [14:24 Object.values ](https://youtu.be/fUjHLj8bq_Y?t=864) -- [15:06 Object.keys ](https://youtu.be/fUjHLj8bq_Y?t=906) -- [15:15 Object.entries ](https://youtu.be/fUjHLj8bq_Y?t=915) -- [15:49 Object.fromEntries ](https://youtu.be/fUjHLj8bq_Y?t=949) -- [16:36 String.proptotype.padStart / String.proptotype.padEnd ](https://youtu.be/fUjHLj8bq_Y?t=996) -- [17:02 String.proptotype.trimStart / String.proptotype.trimEnd](https://youtu.be/fUjHLj8bq_Y?t=1022) -- [17:18 Operator rest ](https://youtu.be/fUjHLj8bq_Y?t=1038) -- [19:38 Operator spread](https://youtu.be/fUjHLj8bq_Y?t=1178) -- [21:34 Operator exponentiation x ** y](https://youtu.be/fUjHLj8bq_Y?t=1294) -- [22:35 Operator optional chaining ?.](https://youtu.be/fUjHLj8bq_Y?t=1355) -- [24:22 Asynchronous function: async / await ](https://youtu.be/fUjHLj8bq_Y?t=1462) -- [26:34 Trailing Commas ](https://youtu.be/fUjHLj8bq_Y?t=1594) -- [28:00 Asynchronous iterable contract: for-await](https://youtu.be/fUjHLj8bq_Y?t=1680) -- [29:51 Try...catch ](https://youtu.be/fUjHLj8bq_Y?t=1791) -- [30:21 Function.prototype.toString ](https://youtu.be/fUjHLj8bq_Y?t=1821) -- [30:58 Symbol.prototype.description ](https://youtu.be/fUjHLj8bq_Y?t=1858) -- [32:11 Promise.finaly ](https://youtu.be/fUjHLj8bq_Y?t=1931) -- [33:22 Promise.allSettled ](https://youtu.be/fUjHLj8bq_Y?t=2002) -- [36:18 More features](https://youtu.be/fUjHLj8bq_Y?t=2178) +- [00:00 ECMA Script versions](https://youtu.be/fUjHLj8bq_Y?t=0) +- [09:40 Array.proptotype.includes](https://youtu.be/fUjHLj8bq_Y?t=580) +- [10:55 Array.proptotype.flat](https://youtu.be/fUjHLj8bq_Y?t=655) +- [11:36 Array.proptotype.flatMap](https://youtu.be/fUjHLj8bq_Y?t=696) +- [12:20 Array.proptotype.sort](https://youtu.be/fUjHLj8bq_Y?t=740) +- [14:24 Object.values](https://youtu.be/fUjHLj8bq_Y?t=864) +- [15:06 Object.keys](https://youtu.be/fUjHLj8bq_Y?t=906) +- [15:15 Object.entries](https://youtu.be/fUjHLj8bq_Y?t=915) +- [15:49 Object.fromEntries](https://youtu.be/fUjHLj8bq_Y?t=949) +- [16:36 String.proptotype.padStart / String.proptotype.padEnd](https://youtu.be/fUjHLj8bq_Y?t=996) +- [17:02 String.proptotype.trimStart / String.proptotype.trimEnd](https://youtu.be/fUjHLj8bq_Y?t=1022) +- [17:18 Operator rest](https://youtu.be/fUjHLj8bq_Y?t=1038) +- [19:38 Operator spread](https://youtu.be/fUjHLj8bq_Y?t=1178) +- [21:34 Operator exponentiation x ** y](https://youtu.be/fUjHLj8bq_Y?t=1294) +- [22:35 Operator optional chaining ?.](https://youtu.be/fUjHLj8bq_Y?t=1355) +- [24:22 Asynchronous function: async / await](https://youtu.be/fUjHLj8bq_Y?t=1462) +- [26:34 Trailing Commas](https://youtu.be/fUjHLj8bq_Y?t=1594) +- [28:00 Asynchronous iterable contract: for-await](https://youtu.be/fUjHLj8bq_Y?t=1680) +- [29:51 Try...catch](https://youtu.be/fUjHLj8bq_Y?t=1791) +- [30:21 Function.prototype.toString](https://youtu.be/fUjHLj8bq_Y?t=1821) +- [30:58 Symbol.prototype.description](https://youtu.be/fUjHLj8bq_Y?t=1858) +- [32:11 Promise.finaly](https://youtu.be/fUjHLj8bq_Y?t=1931) +- [33:22 Promise.allSettled](https://youtu.be/fUjHLj8bq_Y?t=2002) +- [36:18 More features](https://youtu.be/fUjHLj8bq_Y?t=2178) ## [Вступительная лекция по инженерии программного обеспечения (КПИ 1 курс) 2021-09-01](https://youtu.be/vWi6KyG078g) + ## [Автоматное программирование c примерами на JavaScript](https://youtu.be/mxz7_zcip0c) + ## [Контрактное программирование с примерами на JavaScript и Node.js](https://youtu.be/K5_kSUvbGEQ) + ## [JavaScript - Практические задачи #1: Пример исправления, лайвкодинг, оптимизация и рефакторинг](https://youtu.be/CRmjViLEE9E) + ## [JavaScript и Node.js: Добавь в Github личную карту знаний](https://youtu.be/gDUGZsw2N2g) From 11937cdc4a8dbd04368d03a9f02624f29d9434e1 Mon Sep 17 00:00:00 2001 From: Anton Telichenko Date: Sat, 6 Aug 2022 10:08:49 +0300 Subject: [PATCH 013/217] Update Functional-timecodes.md (#82) Added small fixes, gaps deleted, unnecessary strings deleted --- Courses/Functional-timecodes.md | 266 ++++++++++++++++---------------- 1 file changed, 135 insertions(+), 131 deletions(-) diff --git a/Courses/Functional-timecodes.md b/Courses/Functional-timecodes.md index 8ca0e61..43bbca6 100644 --- a/Courses/Functional-timecodes.md +++ b/Courses/Functional-timecodes.md @@ -4,162 +4,166 @@ ## [Функции, лямбды (стрелочные функции), контексты, замыкания в JavaScript](https://youtu.be/pn5myCmpV2U) -- [00:00:00 Введение ](https://youtu.be/pn5myCmpV2U?t=0) -- [00:11:22 Функция объявление (Declaration)](https://youtu.be/pn5myCmpV2U?t=682) -- [00:12:46 Функция выражение (Expression)](https://youtu.be/pn5myCmpV2U?t=766) -- [00:16:07 Лямбда-выражение (Lambda expression) или функция-стрелка (Arrow function) ](https://youtu.be/pn5myCmpV2U?t=967) -- [00:16:43 Лямбда-функция (Lambda function) ](https://youtu.be/pn5myCmpV2U?t=1003) -- [00:18:45 Область видимости (Scope)](https://youtu.be/pn5myCmpV2U?t=1125) -- [00:25:00 Функции, как абстракции](https://youtu.be/pn5myCmpV2U?t=1500) -- [00:26:43 Методы функции (name, length, toString( ) )](https://youtu.be/pn5myCmpV2U?t=1603) -- [00:31:26 Значения по умолчанию у функции ](https://youtu.be/pn5myCmpV2U?t=1886) -- [00:36:46 Rest-оператор (...args)](https://youtu.be/pn5myCmpV2U?t=2206) -- [00:41:49 Способ определения функции, через new Function](https://youtu.be/pn5myCmpV2U?t=2509) -- [00:44:46 Функции внутри объекта](https://youtu.be/pn5myCmpV2U?t=2686) -- [00:50:42 Обращение к полям объекта из привязанной функции, через this](https://youtu.be/pn5myCmpV2U?t=3042) -- [00:55:24 История синтаксиса создания контекстов, через самовызывающиеся функции ( IIFE)](https://youtu.be/pn5myCmpV2U?t=3324) -- [00:58:30 Методы функции, наследуемой от объекта (call, apply)](https://youtu.be/pn5myCmpV2U?t=3510) -- [01:00:53 Комментирование функций](https://youtu.be/pn5myCmpV2U?t=3653) -- [01:01:27 Задание декомпозиции функции](https://youtu.be/pn5myCmpV2U?t=3687) -- [01:04:24 Замыкание: context ](https://youtu.be/pn5myCmpV2U?t=3864) -- [01:08:41 Замыкание: chainning ](https://youtu.be/pn5myCmpV2U?t=4121) -- [01:11:55 Замыкание: summator ](https://youtu.be/pn5myCmpV2U?t=4315) -- [01:14:16 Замыкание: recursion](https://youtu.be/pn5myCmpV2U?t=4456) +- [00:00:00 Введение](https://youtu.be/pn5myCmpV2U?t=0) +- [00:11:22 Функция объявление (Declaration)](https://youtu.be/pn5myCmpV2U?t=682) +- [00:12:46 Функция выражение (Expression)](https://youtu.be/pn5myCmpV2U?t=766) +- [00:16:07 Лямбда-выражение (Lambda expression) или функция-стрелка (Arrow function)](https://youtu.be/pn5myCmpV2U?t=967) +- [00:16:43 Лямбда-функция (Lambda function)](https://youtu.be/pn5myCmpV2U?t=1003) +- [00:18:45 Область видимости (Scope)](https://youtu.be/pn5myCmpV2U?t=1125) +- [00:25:00 Функции, как абстракции](https://youtu.be/pn5myCmpV2U?t=1500) +- [00:26:43 Методы функции (name, length, toString( ) )](https://youtu.be/pn5myCmpV2U?t=1603) +- [00:31:26 Значения по умолчанию у функции](https://youtu.be/pn5myCmpV2U?t=1886) +- [00:36:46 Rest-оператор (...args)](https://youtu.be/pn5myCmpV2U?t=2206) +- [00:41:49 Способ определения функции, через new Function](https://youtu.be/pn5myCmpV2U?t=2509) +- [00:44:46 Функции внутри объекта](https://youtu.be/pn5myCmpV2U?t=2686) +- [00:50:42 Обращение к полям объекта из привязанной функции, через this](https://youtu.be/pn5myCmpV2U?t=3042) +- [00:55:24 История синтаксиса создания контекстов, через самовызывающиеся функции ( IIFE)](https://youtu.be/pn5myCmpV2U?t=3324) +- [00:58:30 Методы функции, наследуемой от объекта (call, apply)](https://youtu.be/pn5myCmpV2U?t=3510) +- [01:00:53 Комментирование функций](https://youtu.be/pn5myCmpV2U?t=3653) +- [01:01:27 Задание декомпозиции функции](https://youtu.be/pn5myCmpV2U?t=3687) +- [01:04:24 Замыкание: context](https://youtu.be/pn5myCmpV2U?t=3864) +- [01:08:41 Замыкание: chainning](https://youtu.be/pn5myCmpV2U?t=4121) +- [01:11:55 Замыкание: summator](https://youtu.be/pn5myCmpV2U?t=4315) +- [01:14:16 Замыкание: recursion](https://youtu.be/pn5myCmpV2U?t=4456) ## [Частичное применение и каррирование в JavaScript ( Partial application )](https://youtu.be/ND8KQ5xjk7o) -- [00:00:00 Замыкание ](https://youtu.be/ND8KQ5xjk7o?t=0) -- [00:04:54 Лямбда- функция ](https://youtu.be/ND8KQ5xjk7o?t=294) -- [00:06:06 Метод bind ](https://youtu.be/ND8KQ5xjk7o?t=366) -- [00:08:30 Абстрагированный пример функции ](https://youtu.be/ND8KQ5xjk7o?t=510) -- [00:13:42 Абстрагированный пример функции (расширение) ](https://youtu.be/ND8KQ5xjk7o?t=822) -- [00:15:47 Неправильная реализация каррирования ](https://youtu.be/ND8KQ5xjk7o?t=947) -- [00:22:22 Правильная реализация каррирования ](https://youtu.be/ND8KQ5xjk7o?t=1342) -- [00:28:54 Правильная реализация каррирования (расширение)](https://youtu.be/ND8KQ5xjk7o?t=1734) -- [00:31:41 Функциональные абстракции (superposition)](https://youtu.be/ND8KQ5xjk7o?t=1901) -- [00:38:02 Функциональные абстракции, с сохранением выражений (composition)](https://youtu.be/ND8KQ5xjk7o?t=2282) -- [00:45:05 Композиция с 2 функциями](https://youtu.be/ND8KQ5xjk7o?t=2705) -- [00:46:05 Композиция с n - функциями, при помощи метода reduce](https://youtu.be/ND8KQ5xjk7o?t=2765) -- [00:51:25 Композиция с n - функциями, при помощи цикла ](https://youtu.be/ND8KQ5xjk7o?t=3085) -- [00:54:29 Композиция с n - функциями, при помощи рекурсии](https://youtu.be/ND8KQ5xjk7o?t=3269) -- [00:57:40 Композиция асинхронных функций ](https://youtu.be/ND8KQ5xjk7o?t=3460) -- [01:01:27 Обобщение](https://youtu.be/ND8KQ5xjk7o?t=3687) +- [00:00:00 Замыкание](https://youtu.be/ND8KQ5xjk7o?t=0) +- [00:04:54 Лямбда- функция](https://youtu.be/ND8KQ5xjk7o?t=294) +- [00:06:06 Метод bind](https://youtu.be/ND8KQ5xjk7o?t=366) +- [00:08:30 Абстрагированный пример функции](https://youtu.be/ND8KQ5xjk7o?t=510) +- [00:13:42 Абстрагированный пример функции (расширение)](https://youtu.be/ND8KQ5xjk7o?t=822) +- [00:15:47 Неправильная реализация каррирования](https://youtu.be/ND8KQ5xjk7o?t=947) +- [00:22:22 Правильная реализация каррирования](https://youtu.be/ND8KQ5xjk7o?t=1342) +- [00:28:54 Правильная реализация каррирования (расширение)](https://youtu.be/ND8KQ5xjk7o?t=1734) +- [00:31:41 Функциональные абстракции (superposition)](https://youtu.be/ND8KQ5xjk7o?t=1901) +- [00:38:02 Функциональные абстракции, с сохранением выражений (composition)](https://youtu.be/ND8KQ5xjk7o?t=2282) +- [00:45:05 Композиция с 2 функциями](https://youtu.be/ND8KQ5xjk7o?t=2705) +- [00:46:05 Композиция с n - функциями, при помощи метода reduce](https://youtu.be/ND8KQ5xjk7o?t=2765) +- [00:51:25 Композиция с n - функциями, при помощи цикла](https://youtu.be/ND8KQ5xjk7o?t=3085) +- [00:54:29 Композиция с n - функциями, при помощи рекурсии](https://youtu.be/ND8KQ5xjk7o?t=3269) +- [00:57:40 Композиция асинхронных функций](https://youtu.be/ND8KQ5xjk7o?t=3460) +- [01:01:27 Обобщение](https://youtu.be/ND8KQ5xjk7o?t=3687) ## [Функции высшего порядка, колбеки, события на JavaScript (HigherOrderFunctions, callbacks, events)](https://youtu.be/1vqATwbGHnc) -- [00:00:00 Определение ](https://youtu.be/1vqATwbGHnc?t=0) -- [00:02:03 Математическая функция ](https://youtu.be/1vqATwbGHnc?t=123) -- [00:05:57 Функция обратного вызова (callback) ](https://youtu.be/1vqATwbGHnc?t=357) -- [00:09:33 Замыкание ](https://youtu.be/1vqATwbGHnc?t=573) -- [00:10:51 Цепочка вызовов ](https://youtu.be/1vqATwbGHnc?t=651) -- [00:12:40 Сохранение кэша с помощью замыкания](https://youtu.be/1vqATwbGHnc?t=760) -- [00:18:29 Добавление функции поведение логирования](https://youtu.be/1vqATwbGHnc?t=1109) -- [00:21:45 Обобщение ](https://youtu.be/1vqATwbGHnc?t=1305) -- [00:22:45 Сallback](https://youtu.be/1vqATwbGHnc?t=1365) -- [00:25:32 Сallback асинхронной функции считывание файла](https://youtu.be/1vqATwbGHnc?t=1532) -- [00:28:36 Сallback именованный](https://youtu.be/1vqATwbGHnc?t=1716) -- [00:33:01 Сallback-timer ](https://youtu.be/1vqATwbGHnc?t=1981) -- [00:36:20 Сallback-timer-curry](https://youtu.be/1vqATwbGHnc?t=2180) -- [00:38:59 Listener](https://youtu.be/1vqATwbGHnc?t=2339) -- [00:41:10 Listener-timer](https://youtu.be/1vqATwbGHnc?t=2470) -- [00:46:59 Event](https://youtu.be/1vqATwbGHnc?t=2819) -- [00:53:45 Event-imitter ](https://youtu.be/1vqATwbGHnc?t=3225) -- [00:57:48 Deferred object (отложенный объект)](https://youtu.be/1vqATwbGHnc?t=3468) -- [01:01:31 Errors](https://youtu.be/1vqATwbGHnc?t=3691) +- [00:00:00 Определение](https://youtu.be/1vqATwbGHnc?t=0) +- [00:02:03 Математическая функция](https://youtu.be/1vqATwbGHnc?t=123) +- [00:05:57 Функция обратного вызова (callback)](https://youtu.be/1vqATwbGHnc?t=357) +- [00:09:33 Замыкание](https://youtu.be/1vqATwbGHnc?t=573) +- [00:10:51 Цепочка вызовов](https://youtu.be/1vqATwbGHnc?t=651) +- [00:12:40 Сохранение кэша с помощью замыкания](https://youtu.be/1vqATwbGHnc?t=760) +- [00:18:29 Добавление функции поведение логирования](https://youtu.be/1vqATwbGHnc?t=1109) +- [00:21:45 Обобщение](https://youtu.be/1vqATwbGHnc?t=1305) +- [00:22:45 Сallback](https://youtu.be/1vqATwbGHnc?t=1365) +- [00:25:32 Сallback асинхронной функции считывание файла](https://youtu.be/1vqATwbGHnc?t=1532) +- [00:28:36 Сallback именованный](https://youtu.be/1vqATwbGHnc?t=1716) +- [00:33:01 Сallback-timer](https://youtu.be/1vqATwbGHnc?t=1981) +- [00:36:20 Сallback-timer-curry](https://youtu.be/1vqATwbGHnc?t=2180) +- [00:38:59 Listener](https://youtu.be/1vqATwbGHnc?t=2339) +- [00:41:10 Listener-timer](https://youtu.be/1vqATwbGHnc?t=2470) +- [00:46:59 Event](https://youtu.be/1vqATwbGHnc?t=2819) +- [00:53:45 Event-imitter](https://youtu.be/1vqATwbGHnc?t=3225) +- [00:57:48 Deferred object (отложенный объект)](https://youtu.be/1vqATwbGHnc?t=3468) +- [01:01:31 Errors](https://youtu.be/1vqATwbGHnc?t=3691) ## [Примеси, обертки, декораторы, мемоизация в JavaScript (Wrappers)](https://youtu.be/oRQ0kQr1N-U) -- [00:00:00 Синхронная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=0) -- [00:02:55 Синхронная универсальная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=175) -- [00:08:28 Асинхронная универсальная функция-обертка ](https://youtu.be/oRQ0kQr1N-U?t=508) -- [00:15:50 Синхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/oRQ0kQr1N-U?t=950) -- [00:22:45 Асинхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/oRQ0kQr1N-U?t=1365) -- [00:25:38 Функция-обертка, которая ограничивает вызов функции до одного вызова (once) ](https://youtu.be/oRQ0kQr1N-U?t=1538) -- [00:27:36 Функция-обертка, которая ограничивает вызов функции до n-го вызова (limit)](https://youtu.be/oRQ0kQr1N-U?t=1656) -- [00:29:50 Функция-обертка, которая отменяет вызов функции (cancel)](https://youtu.be/oRQ0kQr1N-U?t=1790) -- [00:32:29 Функция-обертка с методами timeout, limit, cancel](https://youtu.be/oRQ0kQr1N-U?t=1949) -- [00:39:03 Функция-обертка с методами timeout, limit, cancel (оптимизированная)](https://youtu.be/oRQ0kQr1N-U?t=2343) -- [00:42:28 Функция-обертка, которая ограничивает один вызов за 200 мс (throttle)](https://youtu.be/oRQ0kQr1N-U?t=2548) -- [00:45:47 Примесь поля через точку ](https://youtu.be/oRQ0kQr1N-U?t=2747) -- [00:51:35 Примесь поля через функцию extend](https://youtu.be/oRQ0kQr1N-U?t=3095) -- [00:57:35 Примесь поля через object.assign( )](https://youtu.be/oRQ0kQr1N-U?t=3455) -- [00:59:18 Примесь поведения ](https://youtu.be/oRQ0kQr1N-U?t=3558) -- [01:02:23 Примесь изменения класса](https://youtu.be/oRQ0kQr1N-U?t=3743) -- [01:06:50 Определение](https://youtu.be/oRQ0kQr1N-U?t=4010) -- [01:07:30 Реализация простой мемоизации ](https://youtu.be/oRQ0kQr1N-U?t=4050) -- [01:14:43 Реализация простой мемоизации с проверкой скорости ](https://youtu.be/oRQ0kQr1N-U?t=4483) -- [01:20:43 Удаление накопленного кэша ](https://youtu.be/oRQ0kQr1N-U?t=4843) -- [01:25:35 Асинхронная мемоизация ](https://youtu.be/oRQ0kQr1N-U?t=5135) -- [01:31:10 Преобразование аргументов и ключей в hash-функцию](https://youtu.be/oRQ0kQr1N-U?t=5470) -- [01:33:32 Реализация сложной мемоизации](https://youtu.be/oRQ0kQr1N-U?t=5612) +- [00:00:00 Синхронная функция-обертка](https://youtu.be/oRQ0kQr1N-U?t=0) +- [00:02:55 Синхронная универсальная функция-обертка](https://youtu.be/oRQ0kQr1N-U?t=175) +- [00:08:28 Асинхронная универсальная функция-обертка](https://youtu.be/oRQ0kQr1N-U?t=508) +- [00:15:50 Синхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/oRQ0kQr1N-U?t=950) +- [00:22:45 Асинхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/oRQ0kQr1N-U?t=1365) +- [00:25:38 Функция-обертка, которая ограничивает вызов функции до одного вызова (once)](https://youtu.be/oRQ0kQr1N-U?t=1538) +- [00:27:36 Функция-обертка, которая ограничивает вызов функции до n-го вызова (limit)](https://youtu.be/oRQ0kQr1N-U?t=1656) +- [00:29:50 Функция-обертка, которая отменяет вызов функции (cancel)](https://youtu.be/oRQ0kQr1N-U?t=1790) +- [00:32:29 Функция-обертка с методами timeout, limit, cancel](https://youtu.be/oRQ0kQr1N-U?t=1949) +- [00:39:03 Функция-обертка с методами timeout, limit, cancel (оптимизированная)](https://youtu.be/oRQ0kQr1N-U?t=2343) +- [00:42:28 Функция-обертка, которая ограничивает один вызов за 200 мс (throttle)](https://youtu.be/oRQ0kQr1N-U?t=2548) +- [00:45:47 Примесь поля через точку](https://youtu.be/oRQ0kQr1N-U?t=2747) +- [00:51:35 Примесь поля через функцию extend](https://youtu.be/oRQ0kQr1N-U?t=3095) +- [00:57:35 Примесь поля через object.assign( )](https://youtu.be/oRQ0kQr1N-U?t=3455) +- [00:59:18 Примесь поведения](https://youtu.be/oRQ0kQr1N-U?t=3558) +- [01:02:23 Примесь изменения класса](https://youtu.be/oRQ0kQr1N-U?t=3743) +- [01:06:50 Определение](https://youtu.be/oRQ0kQr1N-U?t=4010) +- [01:07:30 Реализация простой мемоизации](https://youtu.be/oRQ0kQr1N-U?t=4050) +- [01:14:43 Реализация простой мемоизации с проверкой скорости](https://youtu.be/oRQ0kQr1N-U?t=4483) +- [01:20:43 Удаление накопленного кэша](https://youtu.be/oRQ0kQr1N-U?t=4843) +- [01:25:35 Асинхронная мемоизация](https://youtu.be/oRQ0kQr1N-U?t=5135) +- [01:31:10 Преобразование аргументов и ключей в hash-функцию](https://youtu.be/oRQ0kQr1N-U?t=5470) +- [01:33:32 Реализация сложной мемоизации](https://youtu.be/oRQ0kQr1N-U?t=5612) ## [Чеининг функций и объектов, обработка ошибок в JavaScript](https://youtu.be/PfuEfIiLX34) -- [00:00:00 Введение ](https://youtu.be/PfuEfIiLX34?t=0) -- [00:01:10 Чеининг через синтаксис вызова функций ](https://youtu.be/PfuEfIiLX34?t=70) -- [00:02:12 Prototype ](https://youtu.be/PfuEfIiLX34?t=132) -- [00:05:45 Сlass](https://youtu.be/PfuEfIiLX34?t=345) -- [00:06:11 Functor](https://youtu.be/PfuEfIiLX34?t=371) -- [00:11:54 Mutable](https://youtu.be/PfuEfIiLX34?t=714) -- [00:16:34 Iterator](https://youtu.be/PfuEfIiLX34?t=994) -- [00:26:18 Promise ](https://youtu.be/PfuEfIiLX34?t=1578) -- [00:26:35 Test](https://youtu.be/PfuEfIiLX34?t=1595) -- [00:37:08 Compare ](https://youtu.be/PfuEfIiLX34?t=2228) -- [00:39:45 Benchmark](https://youtu.be/PfuEfIiLX34?t=2385) -- [00:40:48 Запуск и анализ тестов ](https://youtu.be/PfuEfIiLX34?t=2448) -- [01:03:48 Первый способ возвращение ошибок в синхронном коде ](https://youtu.be/PfuEfIiLX34?t=3828) -- [01:09:24 Второй способ возвращение ошибок в синхронном коде ](https://youtu.be/PfuEfIiLX34?t=4164) -- [01:12:26 Возвращение ошибок в асинхронном коде ](https://youtu.be/PfuEfIiLX34?t=4346) -- [01:16:14 Корректное возвращение ошибок ](https://youtu.be/PfuEfIiLX34?t=4574) -- [01:20:03 Обработка ошибок c promise ](https://youtu.be/PfuEfIiLX34?t=4803) -- [01:23:58 Обработка ошибок c async-await](https://youtu.be/PfuEfIiLX34?t=5038) +- [00:00:00 Введение](https://youtu.be/PfuEfIiLX34?t=0) +- [00:01:10 Чеининг через синтаксис вызова функций](https://youtu.be/PfuEfIiLX34?t=70) +- [00:02:12 Prototype](https://youtu.be/PfuEfIiLX34?t=132) +- [00:05:45 Сlass](https://youtu.be/PfuEfIiLX34?t=345) +- [00:06:11 Functor](https://youtu.be/PfuEfIiLX34?t=371) +- [00:11:54 Mutable](https://youtu.be/PfuEfIiLX34?t=714) +- [00:16:34 Iterator](https://youtu.be/PfuEfIiLX34?t=994) +- [00:26:18 Promise](https://youtu.be/PfuEfIiLX34?t=1578) +- [00:26:35 Test](https://youtu.be/PfuEfIiLX34?t=1595) +- [00:37:08 Compare](https://youtu.be/PfuEfIiLX34?t=2228) +- [00:39:45 Benchmark](https://youtu.be/PfuEfIiLX34?t=2385) +- [00:40:48 Запуск и анализ тестов](https://youtu.be/PfuEfIiLX34?t=2448) +- [01:03:48 Первый способ возвращение ошибок в синхронном коде](https://youtu.be/PfuEfIiLX34?t=3828) +- [01:09:24 Второй способ возвращение ошибок в синхронном коде](https://youtu.be/PfuEfIiLX34?t=4164) +- [01:12:26 Возвращение ошибок в асинхронном коде](https://youtu.be/PfuEfIiLX34?t=4346) +- [01:16:14 Корректное возвращение ошибок](https://youtu.be/PfuEfIiLX34?t=4574) +- [01:20:03 Обработка ошибок c promise](https://youtu.be/PfuEfIiLX34?t=4803) +- [01:23:58 Обработка ошибок c async-await](https://youtu.be/PfuEfIiLX34?t=5038) ## [Функциональное программирование на JavaScript](https://youtu.be/0JxSs_GcvbQ) + ## [Функциональные объекты, функторы и монады в JavaScript](https://youtu.be/3Z7f0Gi8pxw) -- [00:00:00 Определение функтора ](https://youtu.be/3Z7f0Gi8pxw?t=0) -- [00:01:40 Функтор из прототипа ](https://youtu.be/3Z7f0Gi8pxw?t=100) -- [00:08:17 Функтор из прототипа (упрощенный) ](https://youtu.be/3Z7f0Gi8pxw?t=497) -- [00:09:14 Функтор из замыкания ](https://youtu.be/3Z7f0Gi8pxw?t=554) -- [00:11:49 Функтор из замыкания с тернарным оператором](https://youtu.be/3Z7f0Gi8pxw?t=709) -- [00:12:44 Аппликативный функтор из прототипа ](https://youtu.be/3Z7f0Gi8pxw?t=764) -- [00:18:08 Аппликативный функтор из замыкания (монада)](https://youtu.be/3Z7f0Gi8pxw?t=1088) -- [00:23:11 Пример применения монады ](https://youtu.be/3Z7f0Gi8pxw?t=1391) -- [00:28:37 Функциональный объект ](https://youtu.be/3Z7f0Gi8pxw?t=1717) -- [00:39:44 Пример применения функционального объекта](https://youtu.be/3Z7f0Gi8pxw?t=2384) -- [00:45:27 Обобщение](https://youtu.be/3Z7f0Gi8pxw?t=2727) +- [00:00:00 Определение функтора](https://youtu.be/3Z7f0Gi8pxw?t=0) +- [00:01:40 Функтор из прототипа](https://youtu.be/3Z7f0Gi8pxw?t=100) +- [00:08:17 Функтор из прототипа (упрощенный)](https://youtu.be/3Z7f0Gi8pxw?t=497) +- [00:09:14 Функтор из замыкания](https://youtu.be/3Z7f0Gi8pxw?t=554) +- [00:11:49 Функтор из замыкания с тернарным оператором](https://youtu.be/3Z7f0Gi8pxw?t=709) +- [00:12:44 Аппликативный функтор из прототипа](https://youtu.be/3Z7f0Gi8pxw?t=764) +- [00:18:08 Аппликативный функтор из замыкания (монада)](https://youtu.be/3Z7f0Gi8pxw?t=1088) +- [00:23:11 Пример применения монады](https://youtu.be/3Z7f0Gi8pxw?t=1391) +- [00:28:37 Функциональный объект](https://youtu.be/3Z7f0Gi8pxw?t=1717) +- [00:39:44 Пример применения функционального объекта](https://youtu.be/3Z7f0Gi8pxw?t=2384) +- [00:45:27 Обобщение](https://youtu.be/3Z7f0Gi8pxw?t=2727) ## [Отмена асинхронных операций, cancellable callback and Promise в JavaScript](https://youtu.be/T8fXlnqI4Ws) + ## [Future: Асинхронность на фьючерах без состояния](https://youtu.be/22ONv3AGXdk) + ## [Примеси, обертки, декораторы, мемоизация](https://youtu.be/2h9syXN5wO0) -- [00:00:00 Синхронная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=0) -- [00:02:55 Синхронная универсальная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=175) -- [00:08:28 Асинхронная универсальная функция-обертка ](https://youtu.be/2h9syXN5wO0?t=508) -- [00:15:50 Синхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/2h9syXN5wO0?t=950) -- [00:22:45 Асинхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/2h9syXN5wO0?t=1365) -- [00:25:38 Функция-обертка, которая ограничивает вызов функции до одного вызова (once) ](https://youtu.be/2h9syXN5wO0?t=1538) -- [00:27:36 Функция-обертка, которая ограничивает вызов функции до n-го вызова (limit)](https://youtu.be/2h9syXN5wO0?t=1656) -- [00:29:50 Функция-обертка, которая отменяет вызов функции (cancel)](https://youtu.be/2h9syXN5wO0?t=1790) -- [00:32:29 Функция-обертка с методами timeout, limit, cancel](https://youtu.be/2h9syXN5wO0?t=1949) -- [00:39:03 Функция-обертка с методами timeout, limit, cancel (оптимизированная)](https://youtu.be/2h9syXN5wO0?t=2343) -- [00:42:28 Функция-обертка, которая ограничивает один вызов за 200 мс (throttle)](https://youtu.be/2h9syXN5wO0?t=2548) -- [00:45:47 Примесь поля через точку ](https://youtu.be/2h9syXN5wO0?t=2747) -- [00:51:35 Примесь поля через функцию extend](https://youtu.be/2h9syXN5wO0?t=3095) -- [00:57:35 Примесь поля через object.assign( )](https://youtu.be/2h9syXN5wO0?t=3455) -- [00:59:18 Примесь поведения ](https://youtu.be/2h9syXN5wO0?t=3558) -- [01:02:23 Примесь изменения класса](https://youtu.be/2h9syXN5wO0?t=3743) -- [01:06:50 Определение](https://youtu.be/2h9syXN5wO0?t=4010) -- [01:07:30 Реализация простой мемоизации ](https://youtu.be/2h9syXN5wO0?t=4050) -- [01:14:43 Реализация простой мемоизации с проверкой скорости ](https://youtu.be/2h9syXN5wO0?t=4483) -- [01:20:43 Удаление накопленного кэша ](https://youtu.be/2h9syXN5wO0?t=4843) -- [01:25:35 Асинхронная мемоизация ](https://youtu.be/2h9syXN5wO0?t=5135) -- [01:31:10 Преобразование аргументов и ключей в hash-функцию](https://youtu.be/2h9syXN5wO0?t=5470) -- [01:33:32 Реализация сложной мемоизации](https://youtu.be/2h9syXN5wO0?t=5612) +- [00:00:00 Синхронная функция-обертка](https://youtu.be/2h9syXN5wO0?t=0) +- [00:02:55 Синхронная универсальная функция-обертка](https://youtu.be/2h9syXN5wO0?t=175) +- [00:08:28 Асинхронная универсальная функция-обертка](https://youtu.be/2h9syXN5wO0?t=508) +- [00:15:50 Синхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/2h9syXN5wO0?t=950) +- [00:22:45 Асинхронная функция-обертка, которая добавляет поведение (timeout)](https://youtu.be/2h9syXN5wO0?t=1365) +- [00:25:38 Функция-обертка, которая ограничивает вызов функции до одного вызова (once)](https://youtu.be/2h9syXN5wO0?t=1538) +- [00:27:36 Функция-обертка, которая ограничивает вызов функции до n-го вызова (limit)](https://youtu.be/2h9syXN5wO0?t=1656) +- [00:29:50 Функция-обертка, которая отменяет вызов функции (cancel)](https://youtu.be/2h9syXN5wO0?t=1790) +- [00:32:29 Функция-обертка с методами timeout, limit, cancel](https://youtu.be/2h9syXN5wO0?t=1949) +- [00:39:03 Функция-обертка с методами timeout, limit, cancel (оптимизированная)](https://youtu.be/2h9syXN5wO0?t=2343) +- [00:42:28 Функция-обертка, которая ограничивает один вызов за 200 мс (throttle)](https://youtu.be/2h9syXN5wO0?t=2548) +- [00:45:47 Примесь поля через точку](https://youtu.be/2h9syXN5wO0?t=2747) +- [00:51:35 Примесь поля через функцию extend](https://youtu.be/2h9syXN5wO0?t=3095) +- [00:57:35 Примесь поля через object.assign( )](https://youtu.be/2h9syXN5wO0?t=3455) +- [00:59:18 Примесь поведения](https://youtu.be/2h9syXN5wO0?t=3558) +- [01:02:23 Примесь изменения класса](https://youtu.be/2h9syXN5wO0?t=3743) +- [01:06:50 Определение](https://youtu.be/2h9syXN5wO0?t=4010) +- [01:07:30 Реализация простой мемоизации](https://youtu.be/2h9syXN5wO0?t=4050) +- [01:14:43 Реализация простой мемоизации с проверкой скорости](https://youtu.be/2h9syXN5wO0?t=4483) +- [01:20:43 Удаление накопленного кэша](https://youtu.be/2h9syXN5wO0?t=4843) +- [01:25:35 Асинхронная мемоизация](https://youtu.be/2h9syXN5wO0?t=5135) +- [01:31:10 Преобразование аргументов и ключей в hash-функцию](https://youtu.be/2h9syXN5wO0?t=5470) +- [01:33:32 Реализация сложной мемоизации](https://youtu.be/2h9syXN5wO0?t=5612) ## [Мемоизация функций: memoize в JavaScript](https://youtu.be/H6S8QJo2Qxg) + ## [Композиция функций (pipe, compose) в JavaScript](https://youtu.be/xS9FicVrOTI) From bb074217f784471b568bcf45feb6f69e6da0d73e Mon Sep 17 00:00:00 2001 From: Anton Telichenko Date: Sat, 6 Aug 2022 10:10:04 +0300 Subject: [PATCH 014/217] feat: timecodes for paradigms and patterns (#83) --- Courses/Paradigms-timecodes.md | 64 +++++++++++++++++++++++++++++ Courses/Paradigms.md | 4 ++ Courses/Patterns-timecodes.md | 74 ++++++++++++++++++++++++++++++++++ Courses/Patterns.md | 4 ++ 4 files changed, 146 insertions(+) create mode 100644 Courses/Paradigms-timecodes.md create mode 100644 Courses/Patterns-timecodes.md diff --git a/Courses/Paradigms-timecodes.md b/Courses/Paradigms-timecodes.md new file mode 100644 index 0000000..5a8db60 --- /dev/null +++ b/Courses/Paradigms-timecodes.md @@ -0,0 +1,64 @@ +# Таймкоды к курсу "Парадигмы программирования" + +Общее оглавление курса тут: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Paradigms.md + +## [Объектно-ориентированное программирование](https://youtu.be/r4ReQlVtfgQ) + +- [00:00 Введение](https://youtu.be/r4ReQlVtfgQ?t=0) +- [01:32 Основные понятия](https://youtu.be/r4ReQlVtfgQ?t=92) +- [16:42 Принципы ООП](https://youtu.be/r4ReQlVtfgQ?t=1002) +- [16:49 Принципы GRASP](https://youtu.be/r4ReQlVtfgQ?t=1009) +- [29:04 Принципы SOLID](https://youtu.be/r4ReQlVtfgQ?t=1744) +- [41:29 Паттерны GoF](https://youtu.be/r4ReQlVtfgQ?t=2489) + +## [Структуры (struct) или записи (record)](https://youtu.be/Wb7o_kK4aH4) + + +## [Дженерики и обобщенное программирование](https://youtu.be/r6W2z3DQhoI) + + +## [Have Objects Failed? Или что не так с ООП?](https://youtu.be/4yO5OS0vPSw) + +- [1:46 Присвоенные идеи ООП](https://youtu.be/4yO5OS0vPSw?t=106) +- [11:47 Притянутые достоинства ООП](https://youtu.be/4yO5OS0vPSw?t=707) +- [22:06 Проблемы ООП](https://youtu.be/4yO5OS0vPSw?t=1326) +- [39:56 Как жить с ООП](https://youtu.be/4yO5OS0vPSw?t=2396) +- [56:44 Подходящие области для ООП](https://youtu.be/4yO5OS0vPSw?t=3404) +- [1:03:51 Неподходящие области для ООП](https://youtu.be/4yO5OS0vPSw?t=3831) +- [1:11:30 Заключение](https://youtu.be/4yO5OS0vPSw?t=4290) + +## [Функциональное программирование на JavaScript](https://youtu.be/0JxSs_GcvbQ) + + +## [Реактивное программирование на JavaScript](https://youtu.be/7MH8-qQc-48) + +- [0:00 введение](https://youtu.be/7MH8-qQc-48?t=0) +- [3:00 imperative.js](https://youtu.be/7MH8-qQc-48?t=180) +- [4:00 set-get.js](https://youtu.be/7MH8-qQc-48?t=240) +- [7:15 proxy.js](https://youtu.be/7MH8-qQc-48?t=435) +- [23:07 observer.js](https://youtu.be/7MH8-qQc-48?t=1387) + +## [Асинхронное программирование в Node.js и JavaScript](https://youtu.be/hY6Z6qNYzmc) + +- [5:45 Callbacks](https://youtu.be/hY6Z6qNYzmc?t=345) +- [10:00 Async.js or analogues](https://youtu.be/hY6Z6qNYzmc?t=600) +- [15:47 Events](https://youtu.be/hY6Z6qNYzmc?t=947) +- [18:00 Promise](https://youtu.be/hY6Z6qNYzmc?t=1080) +- [25:20 async/await](https://youtu.be/hY6Z6qNYzmc?t=1520) +- [27:10 Functor + Chaining + composition](https://youtu.be/hY6Z6qNYzmc?t=1630) +- [30:49 Problems of callback, async.js, Proimise, async/await](https://youtu.be/hY6Z6qNYzmc?t=1849) +- [34:00 Add timeout to any function](https://youtu.be/hY6Z6qNYzmc?t=2040) +- [36:55 Make function cancelable](https://youtu.be/hY6Z6qNYzmc?t=2215) +- [37:59 More wrappers](https://youtu.be/hY6Z6qNYzmc?t=2279) +- [39:22 Promisify and Callbackify](https://youtu.be/hY6Z6qNYzmc?t=2362) +- [48:47 Sync function to async](https://youtu.be/hY6Z6qNYzmc?t=2927) +- [41:43 Sync function to Promise](https://youtu.be/hY6Z6qNYzmc?t=2503) +- [43:17 Convertors](https://youtu.be/hY6Z6qNYzmc?t=2597) +- [43:31 Metasync](https://youtu.be/hY6Z6qNYzmc?t=2611) +- [45:26 Function composition](https://youtu.be/hY6Z6qNYzmc?t=2726) +- [47:09 Adynchronous function composition](https://youtu.be/hY6Z6qNYzmc?t=2829) +- [47:58 Flow communication like in electronics](https://youtu.be/hY6Z6qNYzmc?t=2878) +- [50:06 Collectors](https://youtu.be/hY6Z6qNYzmc?t=3006) +- [59:17 Queue](https://youtu.be/hY6Z6qNYzmc?t=3557) + +## [Модель акторов для параллельных вычислений](https://youtu.be/xp5MVKEqxY4) diff --git a/Courses/Paradigms.md b/Courses/Paradigms.md index a2c9355..40ba688 100644 --- a/Courses/Paradigms.md +++ b/Courses/Paradigms.md @@ -1,5 +1,9 @@ # Парадигмы программирования +[Таймкоды и подробное оглавление для части лекций](Paradigms-timecodes.md) + +## Видео-лекции + - Процедурное программирование - [Объектно-ориентированное программирование](https://youtu.be/r4ReQlVtfgQ) - [Структуры (struct) или записи (record)](https://youtu.be/Wb7o_kK4aH4) diff --git a/Courses/Patterns-timecodes.md b/Courses/Patterns-timecodes.md new file mode 100644 index 0000000..a431314 --- /dev/null +++ b/Courses/Patterns-timecodes.md @@ -0,0 +1,74 @@ +# Таймкоды к курсу "Шаблоны проектирования" + +Общее оглавление курса тут: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Patterns.md + +## [Шаблон Singleton (синглтон) в JavaScript](https://youtu.be/qdJ5yikZnfE) + +- [00:00:00 Singleton через конструктор прототипа](https://youtu.be/qdJ5yikZnfE?t=0) +- [00:03:27 Singleton через замыкания](https://youtu.be/qdJ5yikZnfE?t=207) +- [00:06:10 Пример singleton через замыкания](https://youtu.be/qdJ5yikZnfE?t=370) +- [00:08:15 Пример singleton через замыкания в функциональном стиле](https://youtu.be/qdJ5yikZnfE?t=495) +- [00:09:23 Пример singleton через замыкания в функциональном стиле (упрощенный)](https://youtu.be/qdJ5yikZnfE?t=563) +- [00:10:32 Создание singleton в JS](https://youtu.be/qdJ5yikZnfE?t=632) + +## [Фабрики и пулы объектов в JavaScript, factorify, poolify](https://youtu.be/Ax_mSvadFp8) + +- [00:00:00 Введение](https://youtu.be/Ax_mSvadFp8?t=0) +- [00:02:38 Фабрика ( factory )](https://youtu.be/Ax_mSvadFp8?t=158) +- [00:05:44 Фабрика прототипов](https://youtu.be/Ax_mSvadFp8?t=344) +- [00:10:48 Фабрика классов](https://youtu.be/Ax_mSvadFp8?t=648) +- [00:12:28 Фабрика функций](https://youtu.be/Ax_mSvadFp8?t=748) +- [00:15:55 Фабричные методы](https://youtu.be/Ax_mSvadFp8?t=955) +- [00:16:55 Превращение функций в фабрику ( factorify)](https://youtu.be/Ax_mSvadFp8?t=1015) +- [00:19:44 Пул ( pool )](https://youtu.be/Ax_mSvadFp8?t=1184) +- [00:23:05 Работа с пулом](https://youtu.be/Ax_mSvadFp8?t=1385) +- [00:23:04 Обобщенный пул](https://youtu.be/Ax_mSvadFp8?t=1384) +- [00:24:55 Пулифицирование фабрики ( poolify )](https://youtu.be/Ax_mSvadFp8?t=1495) +- [00:28:50 Улучшеная пулифицированная фабрика](https://youtu.be/Ax_mSvadFp8?t=1730) +- [00:32:10 Ассинхронная работа с пулом](https://youtu.be/Ax_mSvadFp8?t=1930) +- [00:45:25 Одновременное использование factorify и poolify](https://youtu.be/Ax_mSvadFp8?t=2725) +- [00:51:54 Обобщение](https://youtu.be/Ax_mSvadFp8?t=3114) + +## [Фасад - петтерн для скрытия сложности](https://youtu.be/oJtBO7CystE) + + +## [Адаптер (Adapter) - паттерн достижения совместимости](https://youtu.be/cA65McLQrR8) + +- [0:00 введение](https://youtu.be/cA65McLQrR8?t=0) +- [1:30 adapter на prototype](https://youtu.be/cA65McLQrR8?t=90) +- [3:57 adapter на class](https://youtu.be/cA65McLQrR8?t=237) +- [4:23 adapter на function](https://youtu.be/cA65McLQrR8?t=263) +- [6:15 adapter на классе-обертке (boxing)](https://youtu.be/cA65McLQrR8?t=375) +- [7:08 adapter на замыканиях (closure)](https://youtu.be/cA65McLQrR8?t=428) +- [8:10 adapter на interface](https://youtu.be/cA65McLQrR8?t=490) +- [13:45 adapter на events](https://youtu.be/cA65McLQrR8?t=825) +- [16:00 выводы](https://youtu.be/cA65McLQrR8?t=960) + +## [Стратегия (Strategy) - выбор взаимозаменяемого поведения](https://youtu.be/hO8VSVv0NqM) + +- [0:00 введение](https://youtu.be/hO8VSVv0NqM?t=0) +- [3:40 strategy на class](https://youtu.be/hO8VSVv0NqM?t=220) +- [15:04 strategy на prototype](https://youtu.be/hO8VSVv0NqM?t=904) +- [16:14 strategy на function](https://youtu.be/hO8VSVv0NqM?t=974) +- [20:22 strategy с примером работы над массивом](https://youtu.be/hO8VSVv0NqM?t=1222) +- [24:07 обобщение](https://youtu.be/hO8VSVv0NqM?t=1447) + +## [Паттерн Команда (Command) действие и параметры как объект](https://youtu.be/vER0vYL4hM4) + + +## [Паттерн Revealing Constructor - открытый конструктор](https://youtu.be/leR5sXRkuJI) + + +## [Паттерн Наблюдатель (Observer + Observable)](https://youtu.be/_bFXuLcXoXg) + + +## [Принцип единственной ответственности и закон Конвея](https://youtu.be/o4bQywkBKOI) + + +## [Ассоциация, агрегация и композиция объектов в JavaScript](https://youtu.be/tOIcBrzezK0) + + +## [Принцип подстановки Барбары Лисков](https://youtu.be/RbhYxygxroc) + + +## [Антипаттерны ООП (часть 1) c примерами на JavaScript](https://youtu.be/9d5TG1VsLeU) diff --git a/Courses/Patterns.md b/Courses/Patterns.md index febf4df..6ec67b1 100644 --- a/Courses/Patterns.md +++ b/Courses/Patterns.md @@ -1,5 +1,9 @@ # Шаблоны проектирования +[Таймкоды и подробное оглавление для части лекций](Patterns-timecodes.md) + +## Видео-лекции + - [Шаблон Singleton (синглтон) в JavaScript](https://youtu.be/qdJ5yikZnfE) - Примеры кода: https://github.com/HowProgrammingWorks/Singleton - [Фабрики и пулы объектов в JavaScript, factorify, poolify](https://youtu.be/Ax_mSvadFp8) From 5f38bf743b674b1f9975482c528c765ae5fc2b72 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 7 Aug 2022 22:52:38 +0300 Subject: [PATCH 015/217] Fix completeness --- README.md | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 7865dac..1e3e632 100644 --- a/README.md +++ b/README.md @@ -16,28 +16,30 @@ ## Отдельные курсы -- [Асинхронное программирование](Courses/Asynchronous.md) [(с таймкодами)](Courses/Asynchronous-timecodes.md) - (есть 98% примеров кода и видео-лекции) -- [Технологический стек Node.js](Courses/NodeJS.md) [(с таймкодами)](Courses/NodeJS-timecodes.md) - (есть 97% кода и видео-лекций) +- [Асинхронное программирование](Courses/Asynchronous.md) + (курс готов, регулярно обновляется) + [(с таймкодами)](Courses/Asynchronous-timecodes.md) +- [Технологический стек Node.js](Courses/NodeJS.md) + (курс готов, регулярно обновляется) + [(с таймкодами)](Courses/NodeJS-timecodes.md) - [Технологический стек Metarhia](Courses/Metarhia.md) - (есть 5% примеров и видео-лекций) + (готовность 5%) - [Шаблоны проектирования](Courses/Patterns.md) - (есть 50% примеров кода и видео-лекций) + (готовность 50%) - [Парадигмы программирования](Courses/Paradigms.md) - (есть 80% кода примеров и 60% видео-лекций) + (готовность 70%) - [Метапрограммирование и мультипарадигменное программирование](Courses/Metaprogramming.md) - (есть 50% кода и несколько видео-лекций) + (готовность 50%) - [Алгоритмы и структуры данных](Courses/AlgAndData.md) - (есть до 20% материала, нужно сводить разные варианты) + (готовность 20%) - [Проектирование сетевых протоколов и сервисов](Courses/Network.md) - (есть 50% примеров кода и несколько видео-лекций) + (готовность 50%) - [Инструменты разработки и жизненного цикла ПО](Courses/Tools.md) (есть несколько видео-лекций, нужно расширять) - [Функциональное программирование](Courses/Functional.md) - (есть 20% примеров кода и несколько видео-лекций) + (готовность 20%) - [Объектно-ориентированное программирование](Courses/OOP.md) - (есть 20% примеров кода и несколько видео-лекций) + (готовность 20%) - [GRASP принципы с адаптацией для JavaScript и Node.js](Courses/GRASP.md) (есть 50% материала, записано 20% лекций) - [Операционные системы](Courses/OS.md) From 6a81318eba73d2cff6b262f4ec0316c935a524be Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 7 Aug 2022 23:02:20 +0300 Subject: [PATCH 016/217] Add links to timecodes --- Courses/Asynchronous-timecodes.md | 2 +- Courses/Asynchronous.md | 2 +- Courses/Fundamentals-timecodes.md | 2 +- Courses/Fundamentals.md | 2 ++ Courses/NodeJS-timecodes.md | 2 +- Courses/NodeJS.md | 2 +- README.md | 2 +- 7 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Courses/Asynchronous-timecodes.md b/Courses/Asynchronous-timecodes.md index 1f08c4f..872a11a 100644 --- a/Courses/Asynchronous-timecodes.md +++ b/Courses/Asynchronous-timecodes.md @@ -1,6 +1,6 @@ # Таймкоды к курсу "Асинхронное программирование" -Общее оглавление курса тут: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md +Общее оглавление курса тут: [Asynchronous.md](Asynchronous.md) ## [Асинхронное программирование в Node.js и JavaScript](https://youtu.be/hY6Z6qNYzmc) diff --git a/Courses/Asynchronous.md b/Courses/Asynchronous.md index b4ad541..385b675 100644 --- a/Courses/Asynchronous.md +++ b/Courses/Asynchronous.md @@ -2,7 +2,7 @@ Объем материала: 24 лекции, 27 репозиториев с примерами кода. -[Таймкоды и подробное оглавление для части лекций](Asynchronous-timecodes.md) +[Для части лекций есть таймкоды и подробное оглавление](Asynchronous-timecodes.md) ## Видео-лекции diff --git a/Courses/Fundamentals-timecodes.md b/Courses/Fundamentals-timecodes.md index 5dd2d4e..5bccb6d 100644 --- a/Courses/Fundamentals-timecodes.md +++ b/Courses/Fundamentals-timecodes.md @@ -1,6 +1,6 @@ # Таймкоды к курсу "Основы программирования" -Общее оглавление курса тут: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Fundamentals.md +Общее оглавление курса тут: [Fundamentals.md](Fundamentals.md) ## [Карта специальности инженер-программист](https://youtu.be/SE5aXH-yf0I) diff --git a/Courses/Fundamentals.md b/Courses/Fundamentals.md index eb76e19..664bc79 100644 --- a/Courses/Fundamentals.md +++ b/Courses/Fundamentals.md @@ -2,6 +2,8 @@ Модули [SEF1](#%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C-sef1) и [SEF2](#%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C-sef2) +[Для части лекций есть таймкоды и подробное оглавление](Fundamentals-timecodes.md) + ## Ссылки - Автор: https://github.com/tshemsedinov diff --git a/Courses/NodeJS-timecodes.md b/Courses/NodeJS-timecodes.md index 1bc5f20..1b1c1d7 100644 --- a/Courses/NodeJS-timecodes.md +++ b/Courses/NodeJS-timecodes.md @@ -1,6 +1,6 @@ # Таймкоды к курсу по Node.js -Общее оглавление курса тут: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/NodeJS.md +Общее оглавление курса тут: [NodeJS.md](NodeJS.md) ## [Node.js Введение в технологию](https://youtu.be/WBcHgaoHh1k) diff --git a/Courses/NodeJS.md b/Courses/NodeJS.md index e5bd520..9072bc9 100644 --- a/Courses/NodeJS.md +++ b/Courses/NodeJS.md @@ -4,7 +4,7 @@ Перед основной частью курса по Node.js нужно сначала освоить хоть частично курс по асинхронному программированию: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md -[Таймкоды и подробное оглавление для части лекций](NodeJS-timecodes.md) +[Для части лекций есть таймкоды и подробное оглавление](NodeJS-timecodes.md) ## Доклады и выступления diff --git a/README.md b/README.md index 1e3e632..86d2497 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ - [Введение и обзор знаний](Courses/Introduction.md) (есть несколько видео-лекций) [семинары](Courses/Seminars.md) - [Основы программирования, модули (1 год обучения)](Courses/Fundamentals.md) - (есть до 95% материала) + (есть до 95% материала) [(с таймкодами)](Courses/Fundamentals-timecodes.md) - [Программирование (2 год обучения)](Courses/Advanced.md) (есть до 65% материала) From 48b8c2b2a88b07d0e51957dd19cd3e742cd44931 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 7 Aug 2022 23:05:07 +0300 Subject: [PATCH 017/217] Improve completeness --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 86d2497..d67fd72 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,11 @@ ## Последовательная программа - [Введение и обзор знаний](Courses/Introduction.md) - (есть несколько видео-лекций) [семинары](Courses/Seminars.md) + а так же [семинары](Courses/Seminars.md) - [Основы программирования, модули (1 год обучения)](Courses/Fundamentals.md) - (есть до 95% материала) [(с таймкодами)](Courses/Fundamentals-timecodes.md) + (готовность 95%) [(с таймкодами)](Courses/Fundamentals-timecodes.md) - [Программирование (2 год обучения)](Courses/Advanced.md) - (есть до 65% материала) + (готовность 65%) ## Отдельные курсы @@ -41,24 +41,24 @@ - [Объектно-ориентированное программирование](Courses/OOP.md) (готовность 20%) - [GRASP принципы с адаптацией для JavaScript и Node.js](Courses/GRASP.md) - (есть 50% материала, записано 20% лекций) + (готовность 40%) - [Операционные системы](Courses/OS.md) (нужно сформировать программу) - [Системное программирование](Courses/System.md) (нужно сформировать программу) - [Архитектура информационных систем](Courses/Architecture.md) - (есть несколько видео-лекций) + (готовность 40%) - [Веб-технологии](Courses/Web.md) - (есть 25% кода и несколько видео-лекций) + (готовность 25%) - [Параллельное программирование](Courses/Parallel.md) - (есть 10% примеров и несколько видео-лекций) + (готовность 10%) - [Проектирование баз данных](Courses/Databases.md) - (есть 25% примеров и видео-лекций) + (готовность 25%) - [Высоконагруженные и масштабируемые системы](Courses/Highload.md) - (есть несколько видео-лекций) + (готовность 20%) - [Проектирование пользовательских интерфейсов](Courses/UI-UX.md) (нужно сформировать программу) - [Безопасность информационных систем](Courses/Security.md) (нужно сформировать программу) - [Качество, тестирование и надежность ПО](Courses/Quality.md) - (есть несколько видео-лекций) + (готовность 5%) From 2e99f7849f41f2e39dbe88302b66c971761b31b6 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 7 Aug 2022 23:13:32 +0300 Subject: [PATCH 018/217] Update README --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d67fd72..2798237 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,13 @@ # Индекс и состояние курсов +Книга по большей части материала (в разработке): https://github.com/HowProgrammingWorks/Book + - [Индекс каналов и групп сообщества Метархия](Links.md) - [Индекс докладов, интервью и других выступлений](Courses/Talks.md) - [Индекс практических заданий](Practice/Index.md) - [Индекс созвонов сообщества](Archive/WeeklyCall.md) -## Последовательная программа +## Базовый курс инженерии программного обеспечения - [Введение и обзор знаний](Courses/Introduction.md) а так же [семинары](Courses/Seminars.md) @@ -14,7 +16,7 @@ - [Программирование (2 год обучения)](Courses/Advanced.md) (готовность 65%) -## Отдельные курсы +## Отдельные специализированные курсы - [Асинхронное программирование](Courses/Asynchronous.md) (курс готов, регулярно обновляется) From c6b7d1e54ab7d07a808597b1fb5eb71256a1eb15 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 10 Aug 2022 10:07:52 -0400 Subject: [PATCH 019/217] Update Fundamentals.md --- Courses/Fundamentals.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Courses/Fundamentals.md b/Courses/Fundamentals.md index 664bc79..9e758fa 100644 --- a/Courses/Fundamentals.md +++ b/Courses/Fundamentals.md @@ -42,7 +42,7 @@ - Условия: https://github.com/HowProgrammingWorks/Conditional - Семинар: [Базовый синтаксис языка JavaScript](https://youtu.be/PGqjTXQe_qw) - Семинар: [Автоматическая проверка лабораторных работ](https://youtu.be/M4KpG0LEAyA) -- [Функции, лямбды, контексты, замыкания в JavaScript](https://youtu.be/pn5myCmpV2U) +- [Функции, стрелочные функции, контексты, замыкания в JavaScript](https://youtu.be/pn5myCmpV2U) - Функции: https://github.com/HowProgrammingWorks/Function - Замыкания: https://github.com/HowProgrammingWorks/Closure - [Массивы, объекты, классы, прототипы в JavaScript](https://youtu.be/VBMGnAPfmsY) @@ -105,8 +105,8 @@ - Примеры кода: https://github.com/HowProgrammingWorks/RegExp - [Композиция: pipe, compose](https://youtu.be/xS9FicVrOTI) - Примеры кода: https://github.com/HowProgrammingWorks/Composition -- [Примеси: mixin, extend, Object.assign, class λ-mixin](https://youtu.be/NZMrJ2adEyY) - - Тема class λ-mixin из этой лекции не обязательна для модуля SEF1 +- [Примеси: mixin, extend, Object.assign, class-mixin](https://youtu.be/NZMrJ2adEyY) + - Тема class-mixin из этой лекции не обязательна для модуля SEF1 - Примеры кода: https://github.com/HowProgrammingWorks/Mixin - Старая версия лекции: https://youtu.be/2h9syXN5wO0 - [Прототипное программирование и прототипное наследование](https://youtu.be/SzaXTW2qcJE) From e2d383f97463cf0ed2664e1034121d74bca7d48e Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 25 Aug 2022 15:46:59 +0300 Subject: [PATCH 020/217] Update NodeJS.md --- Courses/NodeJS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/NodeJS.md b/Courses/NodeJS.md index 9072bc9..b05ff46 100644 --- a/Courses/NodeJS.md +++ b/Courses/NodeJS.md @@ -1,6 +1,6 @@ # Технологический стек Node.js -Объем материала: 38 лекций, 37 репозиториев с примерами кода, 4 PDF со слайдами. +Объем материала: 48 лекций + 9 докладов и вебинаров, 37 репозиториев с примерами кода, 4 PDF со слайдами. Перед основной частью курса по Node.js нужно сначала освоить хоть частично курс по асинхронному программированию: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md From 7565650adb9332f7c5d939d77e4553a5bca680bc Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 28 Aug 2022 20:56:00 +0300 Subject: [PATCH 021/217] Add Node.js in 2022-2023 --- Courses/NodeJS-2022-2023.md | 49 +++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Courses/NodeJS-2022-2023.md diff --git a/Courses/NodeJS-2022-2023.md b/Courses/NodeJS-2022-2023.md new file mode 100644 index 0000000..a3ff399 --- /dev/null +++ b/Courses/NodeJS-2022-2023.md @@ -0,0 +1,49 @@ +# Технологический стек Node.js 2022-2023 + +Объем материала: 20 часов лекций, еженедельно 2 часа семинары в течении года, репозитории с примерами кода. +Что нужно знать на входе: +- [Синтаксис JavaScript без всяких триков](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Fundamentals.md) +- [Основы асинхронного программирования](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md) +- Уверенно владеть git, иметь github аккаунт +- Желательно docker, иметь рабочую машину на linux или mac +- Любая среда разработки, IDE или редактор + +Ссылки на старый курс: +- [Структура со ссылками на видео и репозитории с примерами кода](NodeJS.md) +- [Для части лекций есть таймкоды и подробное оглавление](NodeJS-timecodes.md) + +## До начала + +Пока курс готовится, предлагаю посмотреть доклады: + +- [Байки про JavaScript и Node.js с Тимуром Шемсединовым](https://youtu.be/hoKKYKMadQs) +- [Стратегия входа Node.js в корпоративный сектор](https://youtu.be/FLcBrP1KFYk) +- [Node.js Middleware – никогда больше!](https://youtu.be/RS8x73z4csI) + +## Содержание + +- Node.js Введение в технологию, обзор API, основные идеи: за счет чего реализована экономия памяти, cpu, I/O +- Системы модулей CJS (`CommonJS`) and ESM (`ECMAScrip modules`), особенности в Node.js, зависимости и пакеты `npm` +- Асинхронное программирование: `event loop`, `async hooks`, `race condition`, `callbacks`, `async/await`, `thenable`, `promises` +- Параллельное программирование: `threads`, `semaphore`, `mutex`, `spin locks`, `Atomics`, `SharedArrayBuffer`, Web Locks API +- Реактивное программирование: `Observer`, `EventEmitter`, `RxJS`, асинхронные и конкурентные очереди, `async collectors` +- Изоляция кода и данных в Node.js: модели `vm` и `v8`, защита `global`, контекстов, модулей и прототипов от патчинга +- Работа с файлами: `fs`, `Buffer`, `Stream`, `pipe`, `backpressure`, Web streams API, наблюдение за файловой системой +- Структура и архитектура проекта, слои, `DDD`, `Clean architecture`, связанность и связность кода, протекание абстракций +- Принципы `GRASP` и `SOLID` в `JavaScript` с адаптацией для Node.js, `IoC` (инверсия управления) и `DI` (внедрение зависимостей) +- Сетевые протоколы: `HTTP(S)`, `HTTP2`, `TCP`, `UDP`, `TLS`, `Websocket`, `SSE`, `HTTP/3` (`QUIC`) +- Принципы взаимодействия систем: `REST`, `RPC`, `Pipeline`, `Event-bus`, `Event-broker`, клиент-сервер, `peer-to-peer` +- API на принципах транспорт-агностик и фреймворк-агностик, контракты, реализация сессий и сервиса аутентификации +- Приложения, приближенные к реальному времени, интерактивность и коллаборативные приложения на вебсокетах +- Распространенные паттерны и антипаттерны в приложениях на Node.js +- Распределенные системы, высоконагруженные системы, балансировка нагрузки, кластеризация и масштабирование, IP sticky +- Вопросы безопасности: `DoS`, `XSS`, `Path traversal`, `CSRF`, `SQL`-инъекции +- Работа с базами данных, слой доступа к данным, описание структуры данных, доступ к данным, `postgres`, `redis`, `in-memory` +- Сравнение подходов `domain in the middle`, `ORM`, `active record`, `repository`, `data mapper`, схемы данных, `query builder` +- Утечки памяти и ресурсов, количественная оценка надежности, устойчивости, доступности, гибкости, качества +- Инфраструктура и инструментарий: логирование, тестирование, линтеры, отладка, CI/CD, встроенный testing framework +- `Performance hooks`, телеметрия ресурсов и оптимизация: I/O bound, CPU bound, memory bound, профилирование +- `Graceful shutdown` в Node.js, работа с ошибками и исключениями, `unhandled exceptions`, `stack trace` +- Встроенная криптография в Node.js (`openssl`), `addons`, `plugins`, `Node-API` (ранее `N-API`), `WASI` (Webassembly) +- `Serverless` и облачные `FaaS` решения на базе Node.js +- Практическое использование интроспекции, рефлекcии и скаффолдинга From 4af36378281712a5d85dc36cabd669341c81ce6b Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 28 Aug 2022 21:48:21 +0300 Subject: [PATCH 022/217] Update NodeJS-2022-2023.md --- Courses/NodeJS-2022-2023.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/NodeJS-2022-2023.md b/Courses/NodeJS-2022-2023.md index a3ff399..9c61a93 100644 --- a/Courses/NodeJS-2022-2023.md +++ b/Courses/NodeJS-2022-2023.md @@ -27,7 +27,7 @@ - Асинхронное программирование: `event loop`, `async hooks`, `race condition`, `callbacks`, `async/await`, `thenable`, `promises` - Параллельное программирование: `threads`, `semaphore`, `mutex`, `spin locks`, `Atomics`, `SharedArrayBuffer`, Web Locks API - Реактивное программирование: `Observer`, `EventEmitter`, `RxJS`, асинхронные и конкурентные очереди, `async collectors` -- Изоляция кода и данных в Node.js: модели `vm` и `v8`, защита `global`, контекстов, модулей и прототипов от патчинга +- Изоляция кода и данных в Node.js: `vm`, `v8`, защита `global`, контекстов, модулей и прототипов от патчинга - Работа с файлами: `fs`, `Buffer`, `Stream`, `pipe`, `backpressure`, Web streams API, наблюдение за файловой системой - Структура и архитектура проекта, слои, `DDD`, `Clean architecture`, связанность и связность кода, протекание абстракций - Принципы `GRASP` и `SOLID` в `JavaScript` с адаптацией для Node.js, `IoC` (инверсия управления) и `DI` (внедрение зависимостей) From a5cb1d28a3db27e9a8e4616b67018138d5937563 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 28 Aug 2022 22:20:23 +0300 Subject: [PATCH 023/217] Update NodeJS-2022-2023.md --- Courses/NodeJS-2022-2023.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Courses/NodeJS-2022-2023.md b/Courses/NodeJS-2022-2023.md index 9c61a93..ecbd0b7 100644 --- a/Courses/NodeJS-2022-2023.md +++ b/Courses/NodeJS-2022-2023.md @@ -12,6 +12,8 @@ - [Структура со ссылками на видео и репозитории с примерами кода](NodeJS.md) - [Для части лекций есть таймкоды и подробное оглавление](NodeJS-timecodes.md) +Чем это курс не является: это не чтение документации, не курс по фреймворкам, не курс по Metarhia, не повторение старого курса, не лайвкодинг и не мастеркласс, не стрим. Новый курс - это максимально сконцентрированная информация и практические задачи по разработке на чистой ноде но с хорошей архитектурой и использованием всех современных возможностей Node.js + ## До начала Пока курс готовится, предлагаю посмотреть доклады: From 1e12056b0d93bf60aa96bd574f462c46d1bb5517 Mon Sep 17 00:00:00 2001 From: Georgiy Filippov Date: Fri, 19 Aug 2022 20:16:32 +0500 Subject: [PATCH 024/217] fix: add link to code examples in Automata topic - add link - small autofix styling --- Courses/Fundamentals.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Courses/Fundamentals.md b/Courses/Fundamentals.md index 9e758fa..fe7b32e 100644 --- a/Courses/Fundamentals.md +++ b/Courses/Fundamentals.md @@ -157,9 +157,10 @@ - Примеры кода: https://github.com/HowProgrammingWorks/AsyncAwait - Неизменяемые структуры данных (immutable) - [Автоматное программирование: конечные автоматы (машины состояний)](https://youtu.be/mxz7_zcip0c) + - Примеры кода: https://github.com/HowProgrammingWorks/Automata - [Антипаттерны объектно-ориентированного программирования](https://youtu.be/9d5TG1VsLeU) - https://github.com/HowProgrammingWorks/Antipatterns/tree/master/JavaScript/03-OOP -- [Шаблон Singleton (синглтон) в JavaScript](https://youtu.be/qdJ5yikZnfE) +- [Шаблон Singleton (синглтон) в JavaScript](https://youtu.be/qdJ5yikZnfE) - Примеры кода: https://github.com/HowProgrammingWorks/Singleton - [Функциональные объекты, функторы и монады в JavaScript](https://youtu.be/3Z7f0Gi8pxw) - Примеры кода: https://github.com/HowProgrammingWorks/Functor From a8c1c0338fe1ab1fdc5a5163f0ae8b4c2b3d6616 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 29 Aug 2022 16:01:29 +0300 Subject: [PATCH 025/217] Update NodeJS-2022-2023.md --- Courses/NodeJS-2022-2023.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Courses/NodeJS-2022-2023.md b/Courses/NodeJS-2022-2023.md index ecbd0b7..e618213 100644 --- a/Courses/NodeJS-2022-2023.md +++ b/Courses/NodeJS-2022-2023.md @@ -14,6 +14,9 @@ Чем это курс не является: это не чтение документации, не курс по фреймворкам, не курс по Metarhia, не повторение старого курса, не лайвкодинг и не мастеркласс, не стрим. Новый курс - это максимально сконцентрированная информация и практические задачи по разработке на чистой ноде но с хорошей архитектурой и использованием всех современных возможностей Node.js +👉 Patreon: Подписаться: https://www.patreon.com/tshemsedinov +👉 Видео обзор курса: https://youtu.be/UGGzSEfCjPU + ## До начала Пока курс готовится, предлагаю посмотреть доклады: @@ -49,3 +52,12 @@ - Встроенная криптография в Node.js (`openssl`), `addons`, `plugins`, `Node-API` (ранее `N-API`), `WASI` (Webassembly) - `Serverless` и облачные `FaaS` решения на базе Node.js - Практическое использование интроспекции, рефлекcии и скаффолдинга + +# Доступ + +- До 15 сентября можно подписаться на Patreon, план «Professional» на 1 год за $102 +- После 15 сентября уже на план «Expert» на 1 год за $204 +- Помесячная подписка на «Professional» и «Expert» не дает доступа +- Доступ к матераиалам курса остается и после завершения подписки + +👉 Подписаться: https://www.patreon.com/tshemsedinov From 01f26621fcb415494dd829f1fdb98a61eb51a519 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 5 Sep 2022 17:49:40 +0300 Subject: [PATCH 026/217] Update Talks.md --- Courses/Talks.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Courses/Talks.md b/Courses/Talks.md index 40ec050..004a3db 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -2,10 +2,6 @@ ## Future talks -- [IT-Kamasutra](https://youtu.be/ND5HNHicACI) -- [Anywhere Club и АйТиБорода про JavaScript](https://youtube.com/AnywhereClub) -- [Интервью на канале SergeyNemchinskiy](https://youtube.com/SergeyNemchinskiy) - ## 2022 - [Интервью на 5 часов на канале ITBEARD](https://youtu.be/0xtEdIy2j88) @@ -15,6 +11,8 @@ - [Google Developer Student Club - Мультипарадигменное и метапрограммирование](https://youtu.be/Bo9y4IxdNRY) - 10 Февраля - https://gdsc.community.dev/events/details/developer-student-clubs-national-technical-university-of-ukraine-kyiv-polytechnic-institute-natsionalnii-tekhnichnii-universitet-ukrayini-kiyivskii-politekhnichnii-institut-presents-tech-talk-multi-paradigm-and-meta-programming/ - [Odessa.js Architecture TechCorner](https://youtu.be/OARxqxb262Q) +- [Backend на Node.js и почему TypeScript может навредить - Anywhere Club](https://youtu.be/VmKl4kAGitc) +- [Асинхронный JS, однопоточный NodeJS, event loop и libuv - IT-Kamasutra](https://youtu.be/ND5HNHicACI) ## 2021 From bea82a1f942cb765838e4b625337e2f9dfa4cf17 Mon Sep 17 00:00:00 2001 From: Georgiy Filippov Date: Fri, 16 Sep 2022 23:09:23 +0500 Subject: [PATCH 027/217] fix: fix link to code examples in IntegrationTesting topic --- Courses/Fundamentals.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/Fundamentals.md b/Courses/Fundamentals.md index fe7b32e..2ab7bc1 100644 --- a/Courses/Fundamentals.md +++ b/Courses/Fundamentals.md @@ -178,7 +178,7 @@ - Тестирование: https://github.com/HowProgrammingWorks/Testing - Юниттесты: https://github.com/HowProgrammingWorks/Unittesting - [Тестирование: системное и интеграционное тестирование](https://youtu.be/OuKu_6H_6gE) - - Примеры кода: https://github.com/HowProgrammingWorks/Unittesting + - Примеры кода: https://github.com/HowProgrammingWorks/IntegrationTesting - [Интроспекция и рефлексия в JavaScript](https://youtu.be/yvW1PjUVeM0) - Интроспекция: https://github.com/HowProgrammingWorks/Introspection - Рефлекция: https://github.com/HowProgrammingWorks/Reflect From dec7df2ce75d7bb08b91f2c7358a7231fd2fcb1b Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 20 Sep 2022 21:45:58 +0300 Subject: [PATCH 028/217] Create Roadmap.md --- Courses/Roadmap.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Courses/Roadmap.md diff --git a/Courses/Roadmap.md b/Courses/Roadmap.md new file mode 100644 index 0000000..1541d63 --- /dev/null +++ b/Courses/Roadmap.md @@ -0,0 +1,22 @@ +# Roadmap + +![Roadmap (1)](https://user-images.githubusercontent.com/4405297/191325086-c273db69-5df6-4114-b520-bf6d3f9f4d9b.png) + +## Programming Fundamentals + +- [Основы JavaScript: облегченный курс для начинающих](https://www.youtube.com/playlist?list=PLpmhTzMVLuROAIey9vW3pyRSpHfknLssu) +- [Углубленный JavaScript: старый курс](./Fundamentals.md) + +## Multi-paradigm programming + +## Asynchronous programming + +- [Асинхронное программирование](./Asynchronous.md) +- [Таймкоды к курсу](./Asynchronous-timecodes.md) + +## OOP, GRASP, SOLOD, GoF + +## Node.js + +- [Технологический стек Node.js](./NodeJS.md) +- [Таймкоды к курсу](./NodeJS-timecodes.md) From ee9dcadbb240faea08f35ce4bbd295fdb2f46791 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 20 Sep 2022 23:31:07 +0300 Subject: [PATCH 029/217] Add OOP, GRASP, SOLOD, GoF --- Courses/Roadmap.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Courses/Roadmap.md b/Courses/Roadmap.md index 1541d63..28b5ec4 100644 --- a/Courses/Roadmap.md +++ b/Courses/Roadmap.md @@ -7,8 +7,6 @@ - [Основы JavaScript: облегченный курс для начинающих](https://www.youtube.com/playlist?list=PLpmhTzMVLuROAIey9vW3pyRSpHfknLssu) - [Углубленный JavaScript: старый курс](./Fundamentals.md) -## Multi-paradigm programming - ## Asynchronous programming - [Асинхронное программирование](./Asynchronous.md) @@ -16,6 +14,14 @@ ## OOP, GRASP, SOLOD, GoF +- [Шаблоны проектирования](./Patterns.md) +- [Объектно-ориентированное программирование](./OOP.md) +- [GRASP принципы с адаптацией для JavaScript и Node.js](./GRASP.md) +- [Архитектура информационных систем](./Architecture.md) +- [Стратегия входа Node.js в корпоративный сектор](https://youtu.be/FLcBrP1KFYk) +- [Как Node.js разработчику подготовиться к проектам корпоративного уровня](https://youtu.be/DghzF_OmodY) +- [Как GRASP и SOLID защитят ваш Node.js код от мидлварей и протекания абстракций](https://youtu.be/p063fy3fHZM) + ## Node.js - [Технологический стек Node.js](./NodeJS.md) From ffffff2c0cf2739b07ed237f0fadea5d1e2bec3c Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 22 Sep 2022 19:01:30 +0300 Subject: [PATCH 030/217] Update Roadmap.md --- Courses/Roadmap.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Courses/Roadmap.md b/Courses/Roadmap.md index 28b5ec4..b3a86ed 100644 --- a/Courses/Roadmap.md +++ b/Courses/Roadmap.md @@ -6,6 +6,8 @@ - [Основы JavaScript: облегченный курс для начинающих](https://www.youtube.com/playlist?list=PLpmhTzMVLuROAIey9vW3pyRSpHfknLssu) - [Углубленный JavaScript: старый курс](./Fundamentals.md) +- [MDN JavaScript Guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide) +- [Парадигмы программирования](Courses/Paradigms.md), [метапрограммирование и мультипарадигменное программирование](./Metaprogramming.md) ## Asynchronous programming @@ -26,3 +28,17 @@ - [Технологический стек Node.js](./NodeJS.md) - [Таймкоды к курсу](./NodeJS-timecodes.md) + +## Architecture and Enterprise Information Systems + +- [Проектирование сетевых протоколов и сервисов](Courses/Network.md) +- [Архитектура информационных систем](Courses/Architecture.md) +- [Проектирование баз данных](Courses/Databases.md) +- [Высоконагруженные и масштабируемые системы](Courses/Highload.md) +- [Безопасность информационных систем](Courses/Security.md) + +# Seminars, Interviews, Public talks + +- [Индекс докладов, интервью и других выступлений](./Talks.md) +- [Публичные собеседования](https://www.youtube.com/watch?v=tlBg-vwYpbs&list=PLHhi8ymDMrQZIC0Py5pekvdH49rkXH_MJ) +- Записи семинаров (скоро будет плейлист за все годы) From c81e2a692b7bdd38de0a1d6ad0e659605461788a Mon Sep 17 00:00:00 2001 From: "d.batmanov" Date: Thu, 22 Sep 2022 21:00:15 +0300 Subject: [PATCH 031/217] fix: paths to the pages in Roadmap.md --- Courses/Roadmap.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Courses/Roadmap.md b/Courses/Roadmap.md index b3a86ed..39ca65a 100644 --- a/Courses/Roadmap.md +++ b/Courses/Roadmap.md @@ -7,7 +7,7 @@ - [Основы JavaScript: облегченный курс для начинающих](https://www.youtube.com/playlist?list=PLpmhTzMVLuROAIey9vW3pyRSpHfknLssu) - [Углубленный JavaScript: старый курс](./Fundamentals.md) - [MDN JavaScript Guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide) -- [Парадигмы программирования](Courses/Paradigms.md), [метапрограммирование и мультипарадигменное программирование](./Metaprogramming.md) +- [Парадигмы программирования](./Paradigms.md), [метапрограммирование и мультипарадигменное программирование](./Metaprogramming.md) ## Asynchronous programming @@ -31,11 +31,11 @@ ## Architecture and Enterprise Information Systems -- [Проектирование сетевых протоколов и сервисов](Courses/Network.md) -- [Архитектура информационных систем](Courses/Architecture.md) -- [Проектирование баз данных](Courses/Databases.md) -- [Высоконагруженные и масштабируемые системы](Courses/Highload.md) -- [Безопасность информационных систем](Courses/Security.md) +- [Проектирование сетевых протоколов и сервисов](./Network.md) +- [Архитектура информационных систем](./Architecture.md) +- [Проектирование баз данных](./Databases.md) +- [Высоконагруженные и масштабируемые системы](./Highload.md) +- [Безопасность информационных систем](./Security.md) # Seminars, Interviews, Public talks From b7d5bb8a296e158492ac4db6b987d9a761af68cc Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 22 Sep 2022 23:30:41 +0300 Subject: [PATCH 032/217] Fix spelling --- Courses/Roadmap.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/Roadmap.md b/Courses/Roadmap.md index 39ca65a..5bac775 100644 --- a/Courses/Roadmap.md +++ b/Courses/Roadmap.md @@ -14,7 +14,7 @@ - [Асинхронное программирование](./Asynchronous.md) - [Таймкоды к курсу](./Asynchronous-timecodes.md) -## OOP, GRASP, SOLOD, GoF +## OOP, GRASP, SOLID, GoF - [Шаблоны проектирования](./Patterns.md) - [Объектно-ориентированное программирование](./OOP.md) From 753676f038565e27ef82625dea1629ae315fb12a Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 26 Sep 2022 20:34:38 +0300 Subject: [PATCH 033/217] Minimum readmap: first version --- Courses/Roadmap-min.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Courses/Roadmap-min.md diff --git a/Courses/Roadmap-min.md b/Courses/Roadmap-min.md new file mode 100644 index 0000000..1583245 --- /dev/null +++ b/Courses/Roadmap-min.md @@ -0,0 +1,19 @@ +# Roadmap + +![Roadmap (1)](https://user-images.githubusercontent.com/4405297/192342829-b1bbded9-6620-44f0-8d7a-c49ccc8a58ff.png) + +## Programming Fundamentals + +- [Основы JavaScript: облегченный курс для начинающих](https://www.youtube.com/playlist?list=PLpmhTzMVLuROAIey9vW3pyRSpHfknLssu) +- [MDN JavaScript Guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide) + +## Asynchronous programming + +- [Асинхронное программирование](./Asynchronous.md) +- [Таймкоды к курсу](./Asynchronous-timecodes.md) + +## Node.js + +- [Технологический стек Node.js](./NodeJS.md) +- [Таймкоды к курсу](./NodeJS-timecodes.md) + From e6468d3f63a5cb741779d748ed467aa01f018208 Mon Sep 17 00:00:00 2001 From: Georgiy Filippov Date: Tue, 27 Sep 2022 02:18:29 +0500 Subject: [PATCH 034/217] fix: fix links in Introspection & Reflection topic --- Courses/Fundamentals.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Courses/Fundamentals.md b/Courses/Fundamentals.md index 2ab7bc1..a929ff6 100644 --- a/Courses/Fundamentals.md +++ b/Courses/Fundamentals.md @@ -181,5 +181,6 @@ - Примеры кода: https://github.com/HowProgrammingWorks/IntegrationTesting - [Интроспекция и рефлексия в JavaScript](https://youtu.be/yvW1PjUVeM0) - Интроспекция: https://github.com/HowProgrammingWorks/Introspection - - Рефлекция: https://github.com/HowProgrammingWorks/Reflect + - Reflect API: https://github.com/HowProgrammingWorks/Reflect + - Рефлексия: https://github.com/HowProgrammingWorks/Reflection - [Почему хорошее ИТ-образование невостребовано рыночком](https://youtu.be/nvIJE6xMpiI) From 1557eb7898e694e6b3f78dcc9f031630a84161b1 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 27 Sep 2022 10:59:17 +0300 Subject: [PATCH 035/217] Update Roadmap-min.md --- Courses/Roadmap-min.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/Roadmap-min.md b/Courses/Roadmap-min.md index 1583245..5fd067b 100644 --- a/Courses/Roadmap-min.md +++ b/Courses/Roadmap-min.md @@ -1,6 +1,6 @@ # Roadmap -![Roadmap (1)](https://user-images.githubusercontent.com/4405297/192342829-b1bbded9-6620-44f0-8d7a-c49ccc8a58ff.png) +![Roadmap](https://user-images.githubusercontent.com/4405297/192468178-5f77ce2c-b536-468c-aad0-16aabd3abd27.png) ## Programming Fundamentals From c9508c03bd1757cae06ab754b0bb0b3c4c7835a1 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 27 Sep 2022 10:59:39 +0300 Subject: [PATCH 036/217] Update Roadmap.md --- Courses/Roadmap.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/Roadmap.md b/Courses/Roadmap.md index 5bac775..bd0b96c 100644 --- a/Courses/Roadmap.md +++ b/Courses/Roadmap.md @@ -1,6 +1,6 @@ # Roadmap -![Roadmap (1)](https://user-images.githubusercontent.com/4405297/191325086-c273db69-5df6-4114-b520-bf6d3f9f4d9b.png) +![Roadmap](https://user-images.githubusercontent.com/4405297/192468392-0408ef42-362c-412b-97d3-3f325778aefb.png) ## Programming Fundamentals From f47e78c883cfeaec81f9914180254af65dcb3c62 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 27 Sep 2022 11:59:57 +0300 Subject: [PATCH 037/217] Update Roadmap.md --- Courses/Roadmap.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/Roadmap.md b/Courses/Roadmap.md index bd0b96c..657a5f5 100644 --- a/Courses/Roadmap.md +++ b/Courses/Roadmap.md @@ -1,6 +1,6 @@ # Roadmap -![Roadmap](https://user-images.githubusercontent.com/4405297/192468392-0408ef42-362c-412b-97d3-3f325778aefb.png) +![Roadmap](https://user-images.githubusercontent.com/4405297/192482199-6aa77555-bb0d-4d72-81cd-de3cefcbc032.png) ## Programming Fundamentals From 896ada95a6f49f1155be1a454149dfea679bc0d5 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 27 Sep 2022 15:15:38 +0300 Subject: [PATCH 038/217] Update Roadmap.md --- Courses/Roadmap.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Courses/Roadmap.md b/Courses/Roadmap.md index 657a5f5..fbb106f 100644 --- a/Courses/Roadmap.md +++ b/Courses/Roadmap.md @@ -28,6 +28,7 @@ - [Технологический стек Node.js](./NodeJS.md) - [Таймкоды к курсу](./NodeJS-timecodes.md) +- [Новый курс Node.js 2022-23](./NodeJS-2022-2023.md) ## Architecture and Enterprise Information Systems From 1308cf35460bc65390892dcc588c8361688b6256 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 27 Sep 2022 15:21:39 +0300 Subject: [PATCH 039/217] Update NodeJS-2022-2023.md --- Courses/NodeJS-2022-2023.md | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/Courses/NodeJS-2022-2023.md b/Courses/NodeJS-2022-2023.md index e618213..ac8cb0d 100644 --- a/Courses/NodeJS-2022-2023.md +++ b/Courses/NodeJS-2022-2023.md @@ -17,14 +17,6 @@ 👉 Patreon: Подписаться: https://www.patreon.com/tshemsedinov 👉 Видео обзор курса: https://youtu.be/UGGzSEfCjPU -## До начала - -Пока курс готовится, предлагаю посмотреть доклады: - -- [Байки про JavaScript и Node.js с Тимуром Шемсединовым](https://youtu.be/hoKKYKMadQs) -- [Стратегия входа Node.js в корпоративный сектор](https://youtu.be/FLcBrP1KFYk) -- [Node.js Middleware – никогда больше!](https://youtu.be/RS8x73z4csI) - ## Содержание - Node.js Введение в технологию, обзор API, основные идеи: за счет чего реализована экономия памяти, cpu, I/O @@ -55,9 +47,14 @@ # Доступ -- До 15 сентября можно подписаться на Patreon, план «Professional» на 1 год за $102 -- После 15 сентября уже на план «Expert» на 1 год за $204 -- Помесячная подписка на «Professional» и «Expert» не дает доступа -- Доступ к матераиалам курса остается и после завершения подписки +План «Expert» на 1 год за $204 на Patreon. +Помесячная подписка «Expert» не дает доступа. +Доступ к матераиалам курса остается и после завершения подписки. 👉 Подписаться: https://www.patreon.com/tshemsedinov + +## Дополнительные материалы + +- [Байки про JavaScript и Node.js с Тимуром Шемсединовым](https://youtu.be/hoKKYKMadQs) +- [Стратегия входа Node.js в корпоративный сектор](https://youtu.be/FLcBrP1KFYk) +- [Node.js Middleware – никогда больше!](https://youtu.be/RS8x73z4csI) From 81d1c1b0c8f42a326626287baa5719763c421b27 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 27 Sep 2022 15:23:40 +0300 Subject: [PATCH 040/217] Update Roadmap.md --- Courses/Roadmap.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/Roadmap.md b/Courses/Roadmap.md index fbb106f..9670682 100644 --- a/Courses/Roadmap.md +++ b/Courses/Roadmap.md @@ -1,6 +1,6 @@ # Roadmap -![Roadmap](https://user-images.githubusercontent.com/4405297/192482199-6aa77555-bb0d-4d72-81cd-de3cefcbc032.png) +![Roadmap](https://user-images.githubusercontent.com/4405297/192525334-665c5969-4957-4cb8-884c-b31b440ba7ad.png) ## Programming Fundamentals From 12c601b6f11d495fc63b0826377cb6457427c875 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 27 Sep 2022 15:45:27 +0300 Subject: [PATCH 041/217] Update Roadmap.md --- Courses/Roadmap.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Courses/Roadmap.md b/Courses/Roadmap.md index 9670682..2108995 100644 --- a/Courses/Roadmap.md +++ b/Courses/Roadmap.md @@ -9,6 +9,11 @@ - [MDN JavaScript Guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide) - [Парадигмы программирования](./Paradigms.md), [метапрограммирование и мультипарадигменное программирование](./Metaprogramming.md) +## Web and Frontend + +- [Курс по верстке: HTML, CSS от Евгения Андриканича](https://www.youtube.com/playlist?list=PLM6XATa8CAG4F9nAIYNS5oAiPotxwLFIr) +- [План развития фронтендера от Евгения Андриканича](https://miro.com/app/board/uXjVOeSIAPo=/) + ## Asynchronous programming - [Асинхронное программирование](./Asynchronous.md) From 16319113bada1580c7b26c25dd94bb2df9abe58b Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 27 Sep 2022 16:21:34 +0300 Subject: [PATCH 042/217] Create Specialties.md --- Courses/Specialties.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Courses/Specialties.md diff --git a/Courses/Specialties.md b/Courses/Specialties.md new file mode 100644 index 0000000..91af143 --- /dev/null +++ b/Courses/Specialties.md @@ -0,0 +1,21 @@ +# Roadmap: варианты роадмапа для разных специальностей + +## Общая схема + +![Roadmap common)](https://user-images.githubusercontent.com/4405297/192536927-36a20aea-d19e-4a68-9087-fd9343027c76.png) + +## Роадмап для Backend + +![Roadmap Backend](https://user-images.githubusercontent.com/4405297/192537072-9ff87e51-52c2-4686-b401-5372e8a02814.png) + +## Роадмап для Frontend + +![Roadmap Frontend](https://user-images.githubusercontent.com/4405297/192537239-ce531a3c-b76a-4fc1-a598-a57099fbf794.png) + +## Роадмап для специалиста по доменной логике и бизнес-анализу + +![Roadmap Domain](https://user-images.githubusercontent.com/4405297/192537433-48228dfb-9c04-4e39-bb5c-8fead555e2ad.png) + +## Роадмап для лоукодера + +![Roadmap Lowcode](https://user-images.githubusercontent.com/4405297/192537488-52db0b54-964a-48ff-af84-c280a2130d36.png) From 3e02558a3add9f257026eda1d08b46be89284693 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 28 Sep 2022 00:38:32 +0300 Subject: [PATCH 043/217] Update Roadmap.md --- Courses/Roadmap.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Courses/Roadmap.md b/Courses/Roadmap.md index 2108995..245633e 100644 --- a/Courses/Roadmap.md +++ b/Courses/Roadmap.md @@ -2,6 +2,8 @@ ![Roadmap](https://user-images.githubusercontent.com/4405297/192525334-665c5969-4957-4cb8-884c-b31b440ba7ad.png) +Варианты роадмапа для разных специальностей: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Specialties.md + ## Programming Fundamentals - [Основы JavaScript: облегченный курс для начинающих](https://www.youtube.com/playlist?list=PLpmhTzMVLuROAIey9vW3pyRSpHfknLssu) From 9cb672b05ff8b10f6d91d857545253c43016136c Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 1 Oct 2022 22:20:35 +0300 Subject: [PATCH 044/217] Create Fundamentals-2022-2023.md --- Courses/Fundamentals-2022-2023.md | 270 ++++++++++++++++++++++++++++++ 1 file changed, 270 insertions(+) create mode 100644 Courses/Fundamentals-2022-2023.md diff --git a/Courses/Fundamentals-2022-2023.md b/Courses/Fundamentals-2022-2023.md new file mode 100644 index 0000000..0d11e81 --- /dev/null +++ b/Courses/Fundamentals-2022-2023.md @@ -0,0 +1,270 @@ +# Основы программирования 2022-2023 + +Модули [SEF1](#%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C-sef1) и [SEF2](#%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C-sef2) + +## Ссылки + +- Автор: https://github.com/tshemsedinov +- Канал в телеграме: https://t.me/HowProgrammingWorks +- Группа (чат): https://t.me/Programming_IP9X +- Задачи по курсу: https://github.com/HowProgrammingWorks/Index/blob/master/Practice/SEF1.ru.md +- Словарь терминов: https://github.com/HowProgrammingWorks/Dictionary + +## Модуль SEF1 + +Объем материала: 36 лекций (из них 4 вводные лекции, 8 лекций по языку JS, +18 лекций по фундаментальным понятиям теории программирования, 6 лекций по +инструментам и процессу разработки), 8 семинаров, 9 лабораторных работ, +47 репозиториев с примерами кода. + +### 1 неделя + +- [Введение в программирование](https://youtu.be/5Gt61EX6HZ4) + - Абстракция, модель, алгоритм, программа, синтаксис, повторное использование + - Значение, идентификатор, переменная и константа, литерал, присвоение + - Типы данных, скалярные, ссылочные и структурные типы + - Оператор и выражение, блок кода, функция, цикл, условие + - Слайды: https://www.slideshare.net/tshemsedinov/1-168855278 +- [Введение в программирование, продолжение](https://youtu.be/PzlLXQ3RaDs) + - Процедуры и функции, стек и куча, коллекции, модули, компоненты, библиотеки + - Языки и парадигмы программирования, технологические стеки + - Среда разработки и отладка кода +- Семинар: [Обсуждение плана и материалов курса](https://youtu.be/bQMTbRWrteU) +- [Настройка среды: Node.js, npm, git, eslint](https://youtu.be/hSyA7tcNaCE) + - Смотреть выборочно, что не понятно - пропускайте + - Задания: [Exercises.ru.md](https://github.com/HowProgrammingWorks/Introduction/blob/master/Exercises.ru.md) + +### 2 неделя + +- [Базовый синтаксис JavaScript](https://youtu.be/xJn3k1f4BiM) + - Абстракции и их переиспользование: https://github.com/HowProgrammingWorks/Reusable + - Основные конструкции: https://github.com/HowProgrammingWorks/Cheatsheet + - Типы данных: https://github.com/HowProgrammingWorks/DataTypes +- [Базовый синтаксис JavaScript, продолжение](https://youtu.be/qa-XleqA0JU) + - Типы данных: https://github.com/HowProgrammingWorks/DataTypes + - Условия: https://github.com/HowProgrammingWorks/Conditional +- Семинар: [Базовый синтаксис языка JavaScript](https://youtu.be/PGqjTXQe_qw) +- Семинар: [Автоматическая проверка лабораторных работ](https://youtu.be/M4KpG0LEAyA) + +### 3 неделя + +- [Функции, лямбды, контексты, замыкания в JavaScript](https://youtu.be/pn5myCmpV2U) + - Функции: https://github.com/HowProgrammingWorks/Function + - Замыкания: https://github.com/HowProgrammingWorks/Closure +- [Массивы, объекты, классы, прототипы в JavaScript](https://youtu.be/VBMGnAPfmsY) + - Структуры данных: https://github.com/HowProgrammingWorks/DataStructures + - Итерирование: https://github.com/HowProgrammingWorks/Iteration + - Прототипы: https://github.com/HowProgrammingWorks/Prototype +- [Языки программирования](https://youtu.be/enHA1CRkJe0) +- Семинар: [JavaScript, ответы на вопросы](https://youtu.be/wqkQ6eslyzY) + +### 4 неделя + +- [Частичное применение и каррирование в JavaScript](https://youtu.be/ND8KQ5xjk7o) + - Примеры кода: https://github.com/HowProgrammingWorks/PartialApplication +- [Функции высшего порядка, колбеки, события на JavaScript](https://youtu.be/1vqATwbGHnc) + - Функции высшего порядка: https://github.com/HowProgrammingWorks/HigherOrderFunction + - Функции обратного вызова: https://github.com/HowProgrammingWorks/Callbacks + +### 5 неделя + +- [История развития языков программирования](https://youtu.be/qqz0VSaNxuw) + - Слайды: https://www.slideshare.net/tshemsedinov/programming-languages-comparison-history-future +- [Парадигмы программирования](https://youtu.be/Yk1sxLVHfjs) +- [Работа со строками, шаблонами и юникодом в JavaScript](https://youtu.be/GcopcHQkA8M) + - Примеры кода: https://github.com/HowProgrammingWorks/String + +### 6 неделя + +- [Антипаттерны общие для всех парадигм](https://youtu.be/NMUsUiFokr4) + - Примеры кода: https://github.com/HowProgrammingWorks/Antipatterns/tree/master/JavaScript/01-Common +- [Консоль и командная строка в JavaScript и Node.js](https://youtu.be/5aSZyKi5BmE) + - Примеры кода: https://github.com/HowProgrammingWorks/CommandLine + +### 7 неделя + +- [Чеининг функций и объектов, обработка ошибок в JavaScript](https://youtu.be/PfuEfIiLX34) + - Чеининг: https://github.com/HowProgrammingWorks/Chaining + - Обработка ошибок: https://github.com/HowProgrammingWorks/Errors +- [Рекурсия: косвенная и хвостовая, стек, выход](https://youtu.be/W2skCjIgVKE) + - Примеры кода: https://github.com/HowProgrammingWorks/Recursion + +### 8 неделя + +- [Итерирование, циклы и итераторы в JavaScript](https://youtu.be/lq3b5_UGJas) + - Примеры кода: https://github.com/HowProgrammingWorks/Iteration +- [Антипаттерны процедурного программирования](https://youtu.be/cTv7V22mkwE) + - Примеры кода: https://github.com/HowProgrammingWorks/Antipatterns/tree/master/JavaScript/02-Procedural + +### 9 неделя + +- Семинар: [Ответы на вопросы по курсу "Основы программирования"](https://youtu.be/TY6nDW7aYys) +- [Таймеры, таймауты и EventEmitter](https://youtu.be/LK2jveAnRNg) + - Таймеры: https://github.com/HowProgrammingWorks/Timers + - EventEmitter: https://github.com/HowProgrammingWorks/EventEmitter + - События: https://github.com/metarhia/common/blob/master/lib/events.js +- Семинар: [Выполнение лабораторных работ по курсу](https://youtu.be/ikUOyFPzdJw) + +### 10 неделя + +- [Массивы в JavaScript: методы Array](https://youtu.be/D1kfYBkX9FE) + - Примеры кода: https://github.com/HowProgrammingWorks/Arrays +- [Коллекции, множества, хеш таблицы в JavaScript](https://youtu.be/hN0wsq5LNOc) + - Коллекции: https://github.com/HowProgrammingWorks/Collections + - Хеш таблицы: https://github.com/HowProgrammingWorks/Map + - Множества: https://github.com/HowProgrammingWorks/Set + +### 11 неделя + +- [Code Review: как это и зачем](https://youtu.be/EKL6NiIQ6ZU) + - Примеры: https://github.com/HowProgrammingWorks/CodeReview + - Семинар: [Code Review, ответы на вопросы](https://youtu.be/AgH4OAKbmkM) +- [Структуры данных: списки, стек, очередь, дэк в JavaScript](https://youtu.be/9KvA4hDDSjk) + - Списки: https://github.com/HowProgrammingWorks/LinkedList + - Очереди: https://github.com/HowProgrammingWorks/Dequeue + +### 12 неделя + +- [Сериализация и десериализация в JavaScript и Node.js](https://youtu.be/GtKPniOEzh8) + - Примеры кода: https://github.com/HowProgrammingWorks/Serialization +- [Рефакторинг: причины, цели, техники и процесс](https://youtu.be/z73wmpdweQ4) + - Примеры кода: https://github.com/HowProgrammingWorks/Refactoring + - Пример проекта: https://github.com/tshemsedinov/node-mysql-utilities +- Семинар: [Выбор направления в программировании](https://youtu.be/1gL627DQF4A) + +### 13 неделя + +- [Proxy и Symbol в JavaScript](https://youtu.be/UjZjSDyi9AM) + - Прокси: https://github.com/HowProgrammingWorks/Proxy + - Символы: https://github.com/HowProgrammingWorks/Symbol +- [Регулярные выражения и парсинг в JavaScript](https://youtu.be/-ef2E0ozxao) + - Примеры кода: https://github.com/HowProgrammingWorks/RegExp + +### 14 неделя + +- [Композиция: pipe, compose](https://youtu.be/xS9FicVrOTI) + - Примеры кода: https://github.com/HowProgrammingWorks/Composition +- [Примеси: mixin, extend, Object.assign, class λ-mixin](https://youtu.be/NZMrJ2adEyY) + - Тема class λ-mixin из этой лекции не обязательна для модуля SEF1 + - Примеры кода: https://github.com/HowProgrammingWorks/Mixin + - Старая версия лекции: https://youtu.be/2h9syXN5wO0 + +### 15 неделя + +- [Прототипное программирование и прототипное наследование](https://youtu.be/SzaXTW2qcJE) + - Примеры кода: https://github.com/HowProgrammingWorks/PrototypeChain + - Слайды: https://www.slideshare.net/tshemsedinov/prototype-programming-in-javascript +- [Мемоизация: memoize](https://youtu.be/H6S8QJo2Qxg) + - Примеры кода: https://github.com/HowProgrammingWorks/Memoization + - Старая версия лекции: https://youtu.be/2h9syXN5wO0 + +### 16 неделя + +- [Фабрики и пулы объектов в JavaScript, factorify, poolify](https://youtu.be/Ax_mSvadFp8) + - Фабрики: https://github.com/HowProgrammingWorks/Factory + - Пулы объектов: https://github.com/HowProgrammingWorks/Pool +- [Функции-обертки: wrappers](https://youtu.be/En7pWi2fSzs) + - Примеры кода: https://github.com/HowProgrammingWorks/Wrapper + - Старая версия лекции: https://youtu.be/2h9syXN5wO0 + +### 17 неделя + +- [Типизированные массивы в JavaScript](https://youtu.be/tTNcqxbxhfY) + - Примеры кода: https://github.com/HowProgrammingWorks/TypedArrays +- [Новое в JavaScript](https://youtu.be/fUjHLj8bq_Y) + - Не все в темы обязательны для модуля SEF1, что поймете, то и хорошо + - Слайды: https://www.slideshare.net/tshemsedinov/javascript-esnext-ecmascript-2020-es11-es10-es9-es8-es7-es6-es2020-es2019 + - Примеры кода: https://github.com/HowProgrammingWorks/ESNext + +## Модуль SEF2 + +### 18 неделя + +- [Объектно-ориентированное программирование](https://youtu.be/r4ReQlVtfgQ) +- [Структуры (struct) или записи (record)](https://youtu.be/Wb7o_kK4aH4) +- [Карта специальности инженер-программист](https://youtu.be/SE5aXH-yf0I) + +### 19 неделя + +- [Подход к изучению программирования](https://youtu.be/zMU4ir10DMg) +- Списки: односвязные, двусвязные, циклические, развернутые +- [Графы и запросы к графовым структурам данных](https://youtu.be/a0W0T8Yqw3s) + - Примеры кода: https://github.com/HowProgrammingWorks/Graph + +### 20 неделя + +- [Проекции и отображения наборов данных в JavaScript](https://youtu.be/lwJCq9inky8) + - Примеры кода: https://github.com/HowProgrammingWorks/Projection +- [Мономорфный и полиморфный код, инлайн-кэш, скрытые классы](https://youtu.be/9JUY3prnCQ4) + - Примеры кода: https://github.com/HowProgrammingWorks/Monomorphism + +### 21 неделя + +- [Функциональное программирование](https://youtu.be/0JxSs_GcvbQ) + - Смотрите обзорно, это не обязательная лекция, попробуйте уловить суть парадигмы + - Примеры кода: https://github.com/HowProgrammingWorks/FunctionalProgramming +- [Реактивное программирование](https://youtu.be/7MH8-qQc-48) + - Примеры кода: https://github.com/HowProgrammingWorks/ReactiveProgramming + +### 22 неделя + +- [Работа с файлами, буферами и файловыми потоками в Node.js](https://youtu.be/eQGBS15vUac) + - Файлы: https://github.com/HowProgrammingWorks/Files + - Потоки: https://github.com/HowProgrammingWorks/Streams + - Буферы: https://github.com/HowProgrammingWorks/Buffers +- Оценка сложности алгоритмов +- [Измерение производительности кода и оптимизация](https://youtu.be/sanq2X7Re8o) + - Примеры кода: https://github.com/HowProgrammingWorks/Benchmark + +### 23 неделя + +- [Асинхронное программирование на callback`ах](https://youtu.be/z8Hg6zgi3yQ) +- [Асинхронное программирование на promise`ах](https://youtu.be/RMl4r6s1Y8M) + - Примеры кода: https://github.com/HowProgrammingWorks/AsynchronousProgramming +- [Асинхронные функции, async/await, thenable, обработка ошибок](https://youtu.be/Jdf_tZuJbHI) + - Примеры кода: https://github.com/HowProgrammingWorks/AsyncAwait + +### 24 неделя + +- Неизменяемые структуры данных (immutable) +- Автоматное программирование: конечные автоматы (машины состояний) + +### 25 неделя + +- [Антипаттерны объектно-ориентированного программирования](https://youtu.be/9d5TG1VsLeU) + - https://github.com/HowProgrammingWorks/Antipatterns/tree/master/JavaScript/03-OOP +- [Шаблон Singleton (синглтон) в JavaScript](https://youtu.be/qdJ5yikZnfE) + - Примеры кода: https://github.com/HowProgrammingWorks/Singleton +- [Функциональные объекты, функторы и монады в JavaScript](https://youtu.be/3Z7f0Gi8pxw) + - Примеры кода: https://github.com/HowProgrammingWorks/Functor + +### 26 неделя + +- [Генераторы и асинхронные генераторы](https://youtu.be/kvNm9D32s8s) + - Генераторы: https://github.com/HowProgrammingWorks/Generator + - Асинхронные генераторы: https://github.com/HowProgrammingWorks/AsyncGenerator +- [Итераторы и асинхронные итераторы](https://youtu.be/rBGFlWpVpGs) + - Итераторы: https://github.com/HowProgrammingWorks/Iterator + - Асинхронные итераторы: https://github.com/HowProgrammingWorks/AsyncIterator + +### 27 неделя + +- [Перечислимый тип (enum) в JavaScript и TypeScript](https://youtu.be/BXiKebOIAGI) + - Примеры кода: https://github.com/HowProgrammingWorks/Enum +- [Дженерики и обобщенное программирование](https://youtu.be/r6W2z3DQhoI) + - Примеры кода: https://github.com/HowProgrammingWorks/Generics + +### 28 неделя + +- [Тестирование: юниттесты с примерами](https://youtu.be/CszugIag2TA) + - Тестирование: https://github.com/HowProgrammingWorks/Testing + - Юниттесты: https://github.com/HowProgrammingWorks/Unittesting +- [Тестирование: системное и интеграционное тестирование](https://youtu.be/OuKu_6H_6gE) + - Примеры кода: https://github.com/HowProgrammingWorks/Unittesting + +### 29 неделя + +- [Интроспекция и рефлексия в JavaScript](https://youtu.be/yvW1PjUVeM0) + - Интроспекция: https://github.com/HowProgrammingWorks/Introspection + - Рефлекция: https://github.com/HowProgrammingWorks/Reflect +- [Почему хорошее ИТ-образование невостребовано рыночком](https://youtu.be/nvIJE6xMpiI) From cdb3bbdd3c8271b014290ecf9a14b476aaf98147 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 3 Oct 2022 19:14:46 +0300 Subject: [PATCH 045/217] Update Fundamentals-2022-2023.md --- Courses/Fundamentals-2022-2023.md | 80 +++++++++++++------------------ 1 file changed, 34 insertions(+), 46 deletions(-) diff --git a/Courses/Fundamentals-2022-2023.md b/Courses/Fundamentals-2022-2023.md index 0d11e81..703dfdc 100644 --- a/Courses/Fundamentals-2022-2023.md +++ b/Courses/Fundamentals-2022-2023.md @@ -17,7 +17,7 @@ инструментам и процессу разработки), 8 семинаров, 9 лабораторных работ, 47 репозиториев с примерами кода. -### 1 неделя +### 1 неделя: 03 - 09 октября - [Введение в программирование](https://youtu.be/5Gt61EX6HZ4) - Абстракция, модель, алгоритм, программа, синтаксис, повторное использование @@ -34,7 +34,7 @@ - Смотреть выборочно, что не понятно - пропускайте - Задания: [Exercises.ru.md](https://github.com/HowProgrammingWorks/Introduction/blob/master/Exercises.ru.md) -### 2 неделя +### 2 неделя: 10-16 октября - [Базовый синтаксис JavaScript](https://youtu.be/xJn3k1f4BiM) - Абстракции и их переиспользование: https://github.com/HowProgrammingWorks/Reusable @@ -46,9 +46,9 @@ - Семинар: [Базовый синтаксис языка JavaScript](https://youtu.be/PGqjTXQe_qw) - Семинар: [Автоматическая проверка лабораторных работ](https://youtu.be/M4KpG0LEAyA) -### 3 неделя +### 3 неделя: 17-23 октября -- [Функции, лямбды, контексты, замыкания в JavaScript](https://youtu.be/pn5myCmpV2U) +- [Функции, стрелочные функции, контексты, замыкания в JavaScript](https://youtu.be/pn5myCmpV2U) - Функции: https://github.com/HowProgrammingWorks/Function - Замыкания: https://github.com/HowProgrammingWorks/Closure - [Массивы, объекты, классы, прототипы в JavaScript](https://youtu.be/VBMGnAPfmsY) @@ -58,7 +58,7 @@ - [Языки программирования](https://youtu.be/enHA1CRkJe0) - Семинар: [JavaScript, ответы на вопросы](https://youtu.be/wqkQ6eslyzY) -### 4 неделя +### 4 неделя: 24-30 октября - [Частичное применение и каррирование в JavaScript](https://youtu.be/ND8KQ5xjk7o) - Примеры кода: https://github.com/HowProgrammingWorks/PartialApplication @@ -66,47 +66,41 @@ - Функции высшего порядка: https://github.com/HowProgrammingWorks/HigherOrderFunction - Функции обратного вызова: https://github.com/HowProgrammingWorks/Callbacks -### 5 неделя +### 5 неделя: 31 октября - 06 ноября - [История развития языков программирования](https://youtu.be/qqz0VSaNxuw) - Слайды: https://www.slideshare.net/tshemsedinov/programming-languages-comparison-history-future - [Парадигмы программирования](https://youtu.be/Yk1sxLVHfjs) - [Работа со строками, шаблонами и юникодом в JavaScript](https://youtu.be/GcopcHQkA8M) - Примеры кода: https://github.com/HowProgrammingWorks/String - -### 6 неделя - - [Антипаттерны общие для всех парадигм](https://youtu.be/NMUsUiFokr4) - Примеры кода: https://github.com/HowProgrammingWorks/Antipatterns/tree/master/JavaScript/01-Common -- [Консоль и командная строка в JavaScript и Node.js](https://youtu.be/5aSZyKi5BmE) - - Примеры кода: https://github.com/HowProgrammingWorks/CommandLine -### 7 неделя +### 6 неделя: 07-13 ноября +- [Консоль и командная строка в JavaScript и Node.js](https://youtu.be/5aSZyKi5BmE) + - Примеры кода: https://github.com/HowProgrammingWorks/CommandLine - [Чеининг функций и объектов, обработка ошибок в JavaScript](https://youtu.be/PfuEfIiLX34) - Чеининг: https://github.com/HowProgrammingWorks/Chaining - Обработка ошибок: https://github.com/HowProgrammingWorks/Errors - [Рекурсия: косвенная и хвостовая, стек, выход](https://youtu.be/W2skCjIgVKE) - Примеры кода: https://github.com/HowProgrammingWorks/Recursion -### 8 неделя +### 7 неделя: 07-13 ноября - [Итерирование, циклы и итераторы в JavaScript](https://youtu.be/lq3b5_UGJas) - Примеры кода: https://github.com/HowProgrammingWorks/Iteration - [Антипаттерны процедурного программирования](https://youtu.be/cTv7V22mkwE) - Примеры кода: https://github.com/HowProgrammingWorks/Antipatterns/tree/master/JavaScript/02-Procedural +- Семинар: [Ответы на вопросы по курсу "Основы программирования"](https://youtu.be/TY6nDW7aYys) -### 9 неделя +### 8 неделя: 14-20 ноября -- Семинар: [Ответы на вопросы по курсу "Основы программирования"](https://youtu.be/TY6nDW7aYys) - [Таймеры, таймауты и EventEmitter](https://youtu.be/LK2jveAnRNg) - Таймеры: https://github.com/HowProgrammingWorks/Timers - EventEmitter: https://github.com/HowProgrammingWorks/EventEmitter - События: https://github.com/metarhia/common/blob/master/lib/events.js - Семинар: [Выполнение лабораторных работ по курсу](https://youtu.be/ikUOyFPzdJw) - -### 10 неделя - - [Массивы в JavaScript: методы Array](https://youtu.be/D1kfYBkX9FE) - Примеры кода: https://github.com/HowProgrammingWorks/Arrays - [Коллекции, множества, хеш таблицы в JavaScript](https://youtu.be/hN0wsq5LNOc) @@ -114,7 +108,7 @@ - Хеш таблицы: https://github.com/HowProgrammingWorks/Map - Множества: https://github.com/HowProgrammingWorks/Set -### 11 неделя +### 9 неделя: 21-27 ноября - [Code Review: как это и зачем](https://youtu.be/EKL6NiIQ6ZU) - Примеры: https://github.com/HowProgrammingWorks/CodeReview @@ -122,25 +116,22 @@ - [Структуры данных: списки, стек, очередь, дэк в JavaScript](https://youtu.be/9KvA4hDDSjk) - Списки: https://github.com/HowProgrammingWorks/LinkedList - Очереди: https://github.com/HowProgrammingWorks/Dequeue - -### 12 неделя - - [Сериализация и десериализация в JavaScript и Node.js](https://youtu.be/GtKPniOEzh8) - Примеры кода: https://github.com/HowProgrammingWorks/Serialization + +### 10 неделя: 28 ноября - 04 декабря + - [Рефакторинг: причины, цели, техники и процесс](https://youtu.be/z73wmpdweQ4) - Примеры кода: https://github.com/HowProgrammingWorks/Refactoring - Пример проекта: https://github.com/tshemsedinov/node-mysql-utilities - Семинар: [Выбор направления в программировании](https://youtu.be/1gL627DQF4A) - -### 13 неделя - - [Proxy и Symbol в JavaScript](https://youtu.be/UjZjSDyi9AM) - Прокси: https://github.com/HowProgrammingWorks/Proxy - Символы: https://github.com/HowProgrammingWorks/Symbol - [Регулярные выражения и парсинг в JavaScript](https://youtu.be/-ef2E0ozxao) - Примеры кода: https://github.com/HowProgrammingWorks/RegExp -### 14 неделя +### 11 неделя: 05-11 декабря - [Композиция: pipe, compose](https://youtu.be/xS9FicVrOTI) - Примеры кода: https://github.com/HowProgrammingWorks/Composition @@ -148,18 +139,15 @@ - Тема class λ-mixin из этой лекции не обязательна для модуля SEF1 - Примеры кода: https://github.com/HowProgrammingWorks/Mixin - Старая версия лекции: https://youtu.be/2h9syXN5wO0 - -### 15 неделя - -- [Прототипное программирование и прототипное наследование](https://youtu.be/SzaXTW2qcJE) - - Примеры кода: https://github.com/HowProgrammingWorks/PrototypeChain - - Слайды: https://www.slideshare.net/tshemsedinov/prototype-programming-in-javascript - [Мемоизация: memoize](https://youtu.be/H6S8QJo2Qxg) - Примеры кода: https://github.com/HowProgrammingWorks/Memoization - Старая версия лекции: https://youtu.be/2h9syXN5wO0 -### 16 неделя +### 12 неделя: 12-18 декабря +- [Прототипное программирование и прототипное наследование](https://youtu.be/SzaXTW2qcJE) + - Примеры кода: https://github.com/HowProgrammingWorks/PrototypeChain + - Слайды: https://www.slideshare.net/tshemsedinov/prototype-programming-in-javascript - [Фабрики и пулы объектов в JavaScript, factorify, poolify](https://youtu.be/Ax_mSvadFp8) - Фабрики: https://github.com/HowProgrammingWorks/Factory - Пулы объектов: https://github.com/HowProgrammingWorks/Pool @@ -167,7 +155,7 @@ - Примеры кода: https://github.com/HowProgrammingWorks/Wrapper - Старая версия лекции: https://youtu.be/2h9syXN5wO0 -### 17 неделя +### 13 неделя: 19-25 декабря - [Типизированные массивы в JavaScript](https://youtu.be/tTNcqxbxhfY) - Примеры кода: https://github.com/HowProgrammingWorks/TypedArrays @@ -178,27 +166,27 @@ ## Модуль SEF2 -### 18 неделя +### 14 неделя - [Объектно-ориентированное программирование](https://youtu.be/r4ReQlVtfgQ) - [Структуры (struct) или записи (record)](https://youtu.be/Wb7o_kK4aH4) - [Карта специальности инженер-программист](https://youtu.be/SE5aXH-yf0I) -### 19 неделя +### 15 неделя - [Подход к изучению программирования](https://youtu.be/zMU4ir10DMg) - Списки: односвязные, двусвязные, циклические, развернутые - [Графы и запросы к графовым структурам данных](https://youtu.be/a0W0T8Yqw3s) - Примеры кода: https://github.com/HowProgrammingWorks/Graph -### 20 неделя +### 16 неделя - [Проекции и отображения наборов данных в JavaScript](https://youtu.be/lwJCq9inky8) - Примеры кода: https://github.com/HowProgrammingWorks/Projection - [Мономорфный и полиморфный код, инлайн-кэш, скрытые классы](https://youtu.be/9JUY3prnCQ4) - Примеры кода: https://github.com/HowProgrammingWorks/Monomorphism -### 21 неделя +### 17 неделя - [Функциональное программирование](https://youtu.be/0JxSs_GcvbQ) - Смотрите обзорно, это не обязательная лекция, попробуйте уловить суть парадигмы @@ -206,7 +194,7 @@ - [Реактивное программирование](https://youtu.be/7MH8-qQc-48) - Примеры кода: https://github.com/HowProgrammingWorks/ReactiveProgramming -### 22 неделя +### 18 неделя - [Работа с файлами, буферами и файловыми потоками в Node.js](https://youtu.be/eQGBS15vUac) - Файлы: https://github.com/HowProgrammingWorks/Files @@ -216,7 +204,7 @@ - [Измерение производительности кода и оптимизация](https://youtu.be/sanq2X7Re8o) - Примеры кода: https://github.com/HowProgrammingWorks/Benchmark -### 23 неделя +### 19 неделя - [Асинхронное программирование на callback`ах](https://youtu.be/z8Hg6zgi3yQ) - [Асинхронное программирование на promise`ах](https://youtu.be/RMl4r6s1Y8M) @@ -224,12 +212,12 @@ - [Асинхронные функции, async/await, thenable, обработка ошибок](https://youtu.be/Jdf_tZuJbHI) - Примеры кода: https://github.com/HowProgrammingWorks/AsyncAwait -### 24 неделя +### 20 неделя - Неизменяемые структуры данных (immutable) - Автоматное программирование: конечные автоматы (машины состояний) -### 25 неделя +### 21 неделя - [Антипаттерны объектно-ориентированного программирования](https://youtu.be/9d5TG1VsLeU) - https://github.com/HowProgrammingWorks/Antipatterns/tree/master/JavaScript/03-OOP @@ -238,7 +226,7 @@ - [Функциональные объекты, функторы и монады в JavaScript](https://youtu.be/3Z7f0Gi8pxw) - Примеры кода: https://github.com/HowProgrammingWorks/Functor -### 26 неделя +### 22 неделя - [Генераторы и асинхронные генераторы](https://youtu.be/kvNm9D32s8s) - Генераторы: https://github.com/HowProgrammingWorks/Generator @@ -247,14 +235,14 @@ - Итераторы: https://github.com/HowProgrammingWorks/Iterator - Асинхронные итераторы: https://github.com/HowProgrammingWorks/AsyncIterator -### 27 неделя +### 23 неделя - [Перечислимый тип (enum) в JavaScript и TypeScript](https://youtu.be/BXiKebOIAGI) - Примеры кода: https://github.com/HowProgrammingWorks/Enum - [Дженерики и обобщенное программирование](https://youtu.be/r6W2z3DQhoI) - Примеры кода: https://github.com/HowProgrammingWorks/Generics -### 28 неделя +### 24 неделя - [Тестирование: юниттесты с примерами](https://youtu.be/CszugIag2TA) - Тестирование: https://github.com/HowProgrammingWorks/Testing @@ -262,7 +250,7 @@ - [Тестирование: системное и интеграционное тестирование](https://youtu.be/OuKu_6H_6gE) - Примеры кода: https://github.com/HowProgrammingWorks/Unittesting -### 29 неделя +### 25 неделя - [Интроспекция и рефлексия в JavaScript](https://youtu.be/yvW1PjUVeM0) - Интроспекция: https://github.com/HowProgrammingWorks/Introspection From 63c1622cd824b1ec6dd950292e23731ff176337b Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 4 Oct 2022 14:35:15 +0300 Subject: [PATCH 046/217] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 2798237..5b4ce39 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ - [Введение и обзор знаний](Courses/Introduction.md) а так же [семинары](Courses/Seminars.md) +- [Основы программирования для начинающих](https://www.youtube.com/watch?v=2DM5I2CI4gY&list=PLpmhTzMVLuROAIey9vW3pyRSpHfknLssu) - [Основы программирования, модули (1 год обучения)](Courses/Fundamentals.md) (готовность 95%) [(с таймкодами)](Courses/Fundamentals-timecodes.md) - [Программирование (2 год обучения)](Courses/Advanced.md) From 8c5fc9cdff7965cfd12c66f9444d5c8692c04948 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 4 Oct 2022 14:36:51 +0300 Subject: [PATCH 047/217] Remove percentage --- README.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 5b4ce39..ef59b00 100644 --- a/README.md +++ b/README.md @@ -9,13 +9,10 @@ ## Базовый курс инженерии программного обеспечения -- [Введение и обзор знаний](Courses/Introduction.md) - а так же [семинары](Courses/Seminars.md) +- [Введение и обзор знаний](Courses/Introduction.md) а так же [семинары](Courses/Seminars.md) - [Основы программирования для начинающих](https://www.youtube.com/watch?v=2DM5I2CI4gY&list=PLpmhTzMVLuROAIey9vW3pyRSpHfknLssu) -- [Основы программирования, модули (1 год обучения)](Courses/Fundamentals.md) - (готовность 95%) [(с таймкодами)](Courses/Fundamentals-timecodes.md) +- [Основы программирования, модули (1 год обучения)](Courses/Fundamentals.md) [(с таймкодами)](Courses/Fundamentals-timecodes.md) - [Программирование (2 год обучения)](Courses/Advanced.md) - (готовность 65%) ## Отдельные специализированные курсы From c5affa6b12080283b20a9687c16b0af1768c3fef Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 17 Oct 2022 10:04:25 +0200 Subject: [PATCH 048/217] Update license --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index c12d3d8..f24dbdd 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2017-2020 How.Programming.Works contributors +Copyright (c) 2017-2022 How.Programming.Works contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 808ae0af7026aa8d179c52503f397b55d9f006e1 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 27 Oct 2022 23:22:41 +0300 Subject: [PATCH 049/217] Add Ukrinform video --- Courses/Talks.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index 004a3db..608a0bc 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -13,6 +13,7 @@ - [Odessa.js Architecture TechCorner](https://youtu.be/OARxqxb262Q) - [Backend на Node.js и почему TypeScript может навредить - Anywhere Club](https://youtu.be/VmKl4kAGitc) - [Асинхронный JS, однопоточный NodeJS, event loop и libuv - IT-Kamasutra](https://youtu.be/ND5HNHicACI) +- [Укрінформ: Презентація METATECH](https://youtu.be/Oz8E0mbdDec) ## 2021 From e0b10fc2092508c61437328d1b1800b107658ccc Mon Sep 17 00:00:00 2001 From: mibal_ua <9mohapx9@gmail.com> Date: Thu, 3 Nov 2022 09:07:42 +0100 Subject: [PATCH 050/217] Grouping 6th and 7th weeks and fix weeks enumeration --- Courses/Fundamentals-2022-2023.md | 39 ++++++++++++++----------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/Courses/Fundamentals-2022-2023.md b/Courses/Fundamentals-2022-2023.md index 703dfdc..cef5454 100644 --- a/Courses/Fundamentals-2022-2023.md +++ b/Courses/Fundamentals-2022-2023.md @@ -85,16 +85,13 @@ - Обработка ошибок: https://github.com/HowProgrammingWorks/Errors - [Рекурсия: косвенная и хвостовая, стек, выход](https://youtu.be/W2skCjIgVKE) - Примеры кода: https://github.com/HowProgrammingWorks/Recursion - -### 7 неделя: 07-13 ноября - - [Итерирование, циклы и итераторы в JavaScript](https://youtu.be/lq3b5_UGJas) - Примеры кода: https://github.com/HowProgrammingWorks/Iteration - [Антипаттерны процедурного программирования](https://youtu.be/cTv7V22mkwE) - Примеры кода: https://github.com/HowProgrammingWorks/Antipatterns/tree/master/JavaScript/02-Procedural - Семинар: [Ответы на вопросы по курсу "Основы программирования"](https://youtu.be/TY6nDW7aYys) -### 8 неделя: 14-20 ноября +### 7 неделя: 14-20 ноября - [Таймеры, таймауты и EventEmitter](https://youtu.be/LK2jveAnRNg) - Таймеры: https://github.com/HowProgrammingWorks/Timers @@ -108,7 +105,7 @@ - Хеш таблицы: https://github.com/HowProgrammingWorks/Map - Множества: https://github.com/HowProgrammingWorks/Set -### 9 неделя: 21-27 ноября +### 8 неделя: 21-27 ноября - [Code Review: как это и зачем](https://youtu.be/EKL6NiIQ6ZU) - Примеры: https://github.com/HowProgrammingWorks/CodeReview @@ -119,7 +116,7 @@ - [Сериализация и десериализация в JavaScript и Node.js](https://youtu.be/GtKPniOEzh8) - Примеры кода: https://github.com/HowProgrammingWorks/Serialization -### 10 неделя: 28 ноября - 04 декабря +### 9 неделя: 28 ноября - 04 декабря - [Рефакторинг: причины, цели, техники и процесс](https://youtu.be/z73wmpdweQ4) - Примеры кода: https://github.com/HowProgrammingWorks/Refactoring @@ -131,7 +128,7 @@ - [Регулярные выражения и парсинг в JavaScript](https://youtu.be/-ef2E0ozxao) - Примеры кода: https://github.com/HowProgrammingWorks/RegExp -### 11 неделя: 05-11 декабря +### 10 неделя: 05-11 декабря - [Композиция: pipe, compose](https://youtu.be/xS9FicVrOTI) - Примеры кода: https://github.com/HowProgrammingWorks/Composition @@ -143,7 +140,7 @@ - Примеры кода: https://github.com/HowProgrammingWorks/Memoization - Старая версия лекции: https://youtu.be/2h9syXN5wO0 -### 12 неделя: 12-18 декабря +### 11 неделя: 12-18 декабря - [Прототипное программирование и прототипное наследование](https://youtu.be/SzaXTW2qcJE) - Примеры кода: https://github.com/HowProgrammingWorks/PrototypeChain @@ -155,7 +152,7 @@ - Примеры кода: https://github.com/HowProgrammingWorks/Wrapper - Старая версия лекции: https://youtu.be/2h9syXN5wO0 -### 13 неделя: 19-25 декабря +### 12 неделя: 19-25 декабря - [Типизированные массивы в JavaScript](https://youtu.be/tTNcqxbxhfY) - Примеры кода: https://github.com/HowProgrammingWorks/TypedArrays @@ -166,27 +163,27 @@ ## Модуль SEF2 -### 14 неделя +### 13 неделя - [Объектно-ориентированное программирование](https://youtu.be/r4ReQlVtfgQ) - [Структуры (struct) или записи (record)](https://youtu.be/Wb7o_kK4aH4) - [Карта специальности инженер-программист](https://youtu.be/SE5aXH-yf0I) -### 15 неделя +### 14 неделя - [Подход к изучению программирования](https://youtu.be/zMU4ir10DMg) - Списки: односвязные, двусвязные, циклические, развернутые - [Графы и запросы к графовым структурам данных](https://youtu.be/a0W0T8Yqw3s) - Примеры кода: https://github.com/HowProgrammingWorks/Graph -### 16 неделя +### 15 неделя - [Проекции и отображения наборов данных в JavaScript](https://youtu.be/lwJCq9inky8) - Примеры кода: https://github.com/HowProgrammingWorks/Projection - [Мономорфный и полиморфный код, инлайн-кэш, скрытые классы](https://youtu.be/9JUY3prnCQ4) - Примеры кода: https://github.com/HowProgrammingWorks/Monomorphism -### 17 неделя +### 16 неделя - [Функциональное программирование](https://youtu.be/0JxSs_GcvbQ) - Смотрите обзорно, это не обязательная лекция, попробуйте уловить суть парадигмы @@ -194,7 +191,7 @@ - [Реактивное программирование](https://youtu.be/7MH8-qQc-48) - Примеры кода: https://github.com/HowProgrammingWorks/ReactiveProgramming -### 18 неделя +### 17 неделя - [Работа с файлами, буферами и файловыми потоками в Node.js](https://youtu.be/eQGBS15vUac) - Файлы: https://github.com/HowProgrammingWorks/Files @@ -204,7 +201,7 @@ - [Измерение производительности кода и оптимизация](https://youtu.be/sanq2X7Re8o) - Примеры кода: https://github.com/HowProgrammingWorks/Benchmark -### 19 неделя +### 18 неделя - [Асинхронное программирование на callback`ах](https://youtu.be/z8Hg6zgi3yQ) - [Асинхронное программирование на promise`ах](https://youtu.be/RMl4r6s1Y8M) @@ -212,12 +209,12 @@ - [Асинхронные функции, async/await, thenable, обработка ошибок](https://youtu.be/Jdf_tZuJbHI) - Примеры кода: https://github.com/HowProgrammingWorks/AsyncAwait -### 20 неделя +### 19 неделя - Неизменяемые структуры данных (immutable) - Автоматное программирование: конечные автоматы (машины состояний) -### 21 неделя +### 20 неделя - [Антипаттерны объектно-ориентированного программирования](https://youtu.be/9d5TG1VsLeU) - https://github.com/HowProgrammingWorks/Antipatterns/tree/master/JavaScript/03-OOP @@ -226,7 +223,7 @@ - [Функциональные объекты, функторы и монады в JavaScript](https://youtu.be/3Z7f0Gi8pxw) - Примеры кода: https://github.com/HowProgrammingWorks/Functor -### 22 неделя +### 21 неделя - [Генераторы и асинхронные генераторы](https://youtu.be/kvNm9D32s8s) - Генераторы: https://github.com/HowProgrammingWorks/Generator @@ -235,14 +232,14 @@ - Итераторы: https://github.com/HowProgrammingWorks/Iterator - Асинхронные итераторы: https://github.com/HowProgrammingWorks/AsyncIterator -### 23 неделя +### 22 неделя - [Перечислимый тип (enum) в JavaScript и TypeScript](https://youtu.be/BXiKebOIAGI) - Примеры кода: https://github.com/HowProgrammingWorks/Enum - [Дженерики и обобщенное программирование](https://youtu.be/r6W2z3DQhoI) - Примеры кода: https://github.com/HowProgrammingWorks/Generics -### 24 неделя +### 23 неделя - [Тестирование: юниттесты с примерами](https://youtu.be/CszugIag2TA) - Тестирование: https://github.com/HowProgrammingWorks/Testing @@ -250,7 +247,7 @@ - [Тестирование: системное и интеграционное тестирование](https://youtu.be/OuKu_6H_6gE) - Примеры кода: https://github.com/HowProgrammingWorks/Unittesting -### 25 неделя +### 24 неделя - [Интроспекция и рефлексия в JavaScript](https://youtu.be/yvW1PjUVeM0) - Интроспекция: https://github.com/HowProgrammingWorks/Introspection From 9d9617a086ee71434f5fedc31e22176962d44759 Mon Sep 17 00:00:00 2001 From: Anton Telichenko Date: Thu, 1 Dec 2022 21:30:37 +0100 Subject: [PATCH 051/217] Update WeeklyCall.md PR-URL: https://github.com/HowProgrammingWorks/Index/pull/90 --- Archive/WeeklyCall.md | 268 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 268 insertions(+) diff --git a/Archive/WeeklyCall.md b/Archive/WeeklyCall.md index 578d37e..bf74e99 100644 --- a/Archive/WeeklyCall.md +++ b/Archive/WeeklyCall.md @@ -908,3 +908,271 @@ 1:15:27 контрибьют за ревью 1:18:20 системы на базе metarhia, контакты с компаниями ``` + +## Выпуск №62 (2022-07-02) +``` +1:00 работа локальных переменных в metarhia модулях +4:45 о публикации тестов модулей в npm +8:00 работа над filestorage +11:20 созвон с желающими поконтрибьютить +14:47 custom router для rest api в metarhia +28:09 об условиях работы в разных странах +36:21 о политике, коррупции, технологиях в гос. секторе, кредитах +56:00 методологии разработки, user-guide для написания продуктов на базе metarhia +``` + +## Выпуск №63 (2022-07-09) +``` +0:00 план звонка +3:27 баги в impress +10:00 распределение новых контрибьюторов +18:10 impress start fix +``` + +## Выпуск №64 (2022-07-16) +``` +0:00 как продвигается разработка? +5:04 issues для сообщества +8:06 о методологии построения прикладных решений, metasql +26:08 система реактивности, metacalc +49:50 multitenancy, добавление новых тенантов +58:47 о новоприбывших фронтендерах и задачах +1:05:50 metacalc issue +1:29:00 трансформация markdown в html +1:31:07 summercamp схемы, metasql, доки +1:34:47 разработка metasql +1:42:16 миграции, бекапы +1:50:13 metasql, registry +``` + +## Выпуск №65 (2022-07-23) +``` +0:00 план звонка +1:16 metacom PR's, review, conflicts resolving +1:16:50 летняя школа, функциональное программирование, js +``` + +## Выпуск №66 (2022-07-30) +``` +0:00 что было сделано / планы +2:10 metacom PR +13:45 о SummerCamp и помощи новичкам +1:06:47 metautil unflatObject +``` + +## Выпуск №67 (2022-08-06) +``` +0:00 планы на колл +1:10 таймкоды +9:10 impress +30:30 metautil unflat +``` + +## Выпуск №68 (2022-08-13) +``` +0:00 impress code review +``` + +## Выпуск №69 (2022-08-20) +``` +0:20 браузер баз данных +20:00 metactos +23:32 metaschema +1:05:09 metaschool, задания +1:31:00 новая версия impress, ошибка при emit через ws +1:33:15 scheduler пример +``` + +## Выпуск №70 (2022-09-03) +``` +0:40 openApi или клиентские обертки вокруг серверных api +5:50 roadmap по курсу +7:15 книжка по Metaprogramming, об архитектуре +29:15 как побороть прокрастинацию? +29:50 будет-ли создание крудов с авторизацией? +34:35 разница между cluster, child process и working threads +56:05 о vscode и electron +1:02:35 как сделать проект, связанный с 1C на node и docker +1:13:00 для чего не используется node +1:27:15 миграции для metarhia +1:41:25 проектирование приложения на node, s3, minio +1:48:30 вопросы по курсу +1:52:35 swayer +1:55:00 будут-ли async/performance-hooks в курсе? +``` + +## Выпуск №71 (2022-09-10) +``` +2:08 где можно найти задачи из курса js для начинающих? +8:36 для написания проекта на metarhia нужно пройти курс по node.js? +17:35 о записанных лекциях +22:45 о написании промисов вручную +25:30 есть ли example для metarhia? +38:50 как в общем будет построен курс? ( + о менторстве) +45:05 когда будет продвигаться разработка метархии, о функциональном программировании +1:12:31 metarhia - альтернатива фреймворкам на бекенде? +1:25:28 про уязвимость JSON.parse +1:38:30 o typescript, пропоузале типов в js +``` + +## Выпуск №72 (2022-09-17) +``` +4:00 о микро/макро-тасках в event-loop +13:14 как писать типы на node.js +17:55 модификаторы доступа, decorators +19:55 как донести мысль о самодостаточности чистой ноды +21:50 как смотреть лекции +28:20 про однопоточность +33:55 разница в пакетных менеджерах +37:06 аудит пакетов +39:52 про изолирование +46:12 почему в node.js течет память +59:15 когда каким способом изолировать? +1:05:55 способы профилирования приложения +1:13:13 что использовать для брокера сообщений +1:21:30 как понять сколько тредов создавать +1:30:20 треды в го +1:32:00 есть ли связь между сложностью языков и задачами, которые они решают +1:37:57 о децентрализации, blockchain +1:39:05 orm, работа с бд, sql +1:51:00 о mongo +1:57:20 о ролях в компании +2:05:20 паттерны, структуры данных +2:09:43 когда следующий урок +2:13:05 задавать вопросы в гитхаб +``` + +## Выпуск №73 (2022-09-24) +``` +2:35 перезапись глобальных объектов в node.js +11:48 обработка ошибок в курсе +18:38 зачем делать свою систему модульности, почему не подходит require или import? +26:33 где смотреть лекции? +31:46 как понять когда лучше написать вручную, а когда заимпортить библиотеку? +44:20 как обрабатывать ошибки, которые происходят при запросе в бд +51:58 о зависимостях на гитхаб +1:01:25 что нужно знать о реализации авторизации пользователя? oAuth0 +1:04:40 что Тимур порекомендовал бы для приложения для подкастов? +1:06:53 что можно почитать об архитектуре/СТО +1:22:24 как Тимур представляет обязанности техлида? +1:32:02 вопрос про кастомный console.log на проекте +1:40:18 как Тимур относится к flow-based архитектуре (node-RED) +1:58:10 ООП, Егор Бугаенко и Elegant Objects +``` + +## Выпуск №74 (2022-10-01) +``` +1:28 e2e testing +7:47 http протокол вместо ws для api +12:49 преобразование файла в строку при require +16:53 почему выполнение файла через контекст лучше чем с require? +28:01 почему изменение прототипа это плохо, а изменение контекста - хорошо +33:42 как часто нужно использовать sandbox? +43:52 о структурах данных, как стыковать структуры данных с js? +1:05:15 для чего нужны metaschema? +1:27:27 с точки зрения доменной логики метасхемы это сущность или агрегат? +1:33:00 куда класть вспомогательные данные к схеме? +1:34:50 как лучше определять где делать ограничения, в бд или бизнес-логике? +1:39:00 почему Тимур не любит монгу? о postgres и mongo +``` + +## Выпуск №75 (2022-10-08) +``` +1:20 сфера применения node.js +2:58 адаптер для routing при подключении fastify +5:12 новая лекция, в каких случаях нужно смотреть? +8:54 загрузка 100 файлов одновременно на node +17:05 как сохранять контекст пользователя при работе с микросервисамм +24:10 транзакция в monobank +29:35 сервер с нагрузкой 2млн запросов в минуту +44:24 shared array, структуры данных, redis +1:12:30 о развитии метархии, миграциях +1:24:20 метархия на фронтенде +``` + +## Выпуск №76 (2022-10-15) +``` +0:44 объяснение sandbox, load.js +35:41 JWT, cookie, sessions +52:20 есть ли возможность работать в компаниях, связанных с Тимуром, на стеке metarhia? +53:57 на какие задачи нужны кадры сейчас, менторство +57:12 реализация локализации сервисов под разные страны +1:40:30 как устроена архитектура хранения сообщений в телеграмме? +1:50:54 почему Тимур запретил-бы switch в прикладном коде +2:08:54 будут ли в курсе примеры тестов? +``` + +## Выпуск №77 (2022-10-22) +``` +0:25 о системных интеграторах метархии, web sammit +7:36 подключение fastify +16:56 о web sammit и системных интеграторах +30:38 у метархии есть клиенты? о метархии, контрибьютерах +42:22 метод close в logger +49:40 почему приложение не падает, если не передавать console.log в sandbox, но вызывать его +1:02:00 проблема с scaffolding +1:14:37 static types в metaschema +1:40:04 гайд по структуре метархии, документация +``` + +## Выпуск №78 (2022-10-29) +``` +0:00 o METATECH +5:37 как в METATECH будут работать заключенные? +11:16 циклический require +22:00 будет ли запрос от компаний для написания приложений на node.js вместе с blockchain +28:57 как подключать фреймворки (дз node), scaffolding +41:51 как прокидывать ошибку при реализации DI на замыканиях, обработка ошибок +52:38 вынос аутентификации на сторонний сервис +1:04:52 как организовать общение между микросервисами? +1:11:48 зачем в node.js внедрили async hooks? +1:22:32 pm2 на тестовом сервере показывает растущий heap каждую секунду +1:29:35 как поддерживать процесс в node.js +1:34:02 для чего используется Promise.race()? +1:38:46 когда по плану следующий урок? +1:40:20 кто продвигает node.js в англоязычном коммьюнити? +1:41:37 как обращаться из одного сервиса к другому в метархии? +1:49:08 документация по metaschema с Лионом +``` + +## Выпуск №79 (2022-11-05) +``` +0:00 новости о web summit, курс по node.js +17:22 гайд по метархии +24:25 концепция воркеров cloudFlare и процедуры +29:20 amazon сервисы, лямды +1:00:21 замыкание, работа с объектом в разных функциях +1:07:30 разворачивание игровых серверов на node.js +1:26:22 вопрос по курсу node.js: почему раньше id передавали в имени роута, а теперь в body? +1:30:00 что выбрать? knex/sql/кастомный квери билдер +1:35:18 sql. работа с сущностью, пример с пользователем, oop +``` + +## Выпуск №80 (2022-11-12) +``` +0:00 новости (менторство, курсы, библиотеки, курс по node.js) +5:05 курс по структурам данных +55:12 как совместить мессенджер с прикладным проектом +1:28:06 проблема с чатом на impress и воркерах +1:44:17 код ревью DDD +1:53:50 кто разбирается в метриках перформанса node +``` + +## Выпуск №81 (2022-11-19) +``` +0:00 новости (программа менторинга, перевыпуск библиотек) +14:44 есть ли действующий пример работы event bus? +35:43 noroutine balancing code review +1:07:00 технические проблемы metarhia +1:23:48 пример приложения на базе курса по node +``` + +## Выпуск №82 (2022-11-26) +``` +0:00 таблица менторов, новые курсы +9:21 как проходит менторинг +37:30 будут ли лекции по курсу node.js +49:27 если node.js проигрывает по базовым функциям условному go, зачем им заниматься +1:22:47 code review balancing +1:35:48 почему js а не с++, нейросети +``` From 117989d20a27e5fde11ba90fcb10ee15b828c212 Mon Sep 17 00:00:00 2001 From: Tima Gixe <60817786+timagixe@users.noreply.github.com> Date: Thu, 5 Jan 2023 13:55:20 +0200 Subject: [PATCH 052/217] Update Fundamentals-timecodes.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add time codes for `Настройка среды: Node.js, npm, git, eslint` lecture --- Courses/Fundamentals-timecodes.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Courses/Fundamentals-timecodes.md b/Courses/Fundamentals-timecodes.md index 5bccb6d..c46ec77 100644 --- a/Courses/Fundamentals-timecodes.md +++ b/Courses/Fundamentals-timecodes.md @@ -110,6 +110,16 @@ ## [Настройка среды: Node.js, npm, git, eslint](https://youtu.be/hSyA7tcNaCE) +- [0:25 - какую IDE использует Тимур](https://www.youtube.com/watch?v=hSyA7tcNaCE&t=25s) +- [1:30 - каким IDE могут пользоваться студенты](https://www.youtube.com/watch?v=hSyA7tcNaCE&t=90s) +- [1:50 - репозиторий со списком необходимых инструментов](https://www.youtube.com/watch?v=hSyA7tcNaCE&t=110s) +- [11:23 - о работе с репозиторием в Github](https://www.youtube.com/watch?v=hSyA7tcNaCE&t=683s) +- [14:05 - о системе Continuous Integration (CI)](https://www.youtube.com/watch?v=hSyA7tcNaCE&t=845s) +- [17:08 - обзор Pull Requests в репозитории](https://www.youtube.com/watch?v=hSyA7tcNaCE&t=1028s) +- [25:40 - процесс мерджа Pull Request](https://www.youtube.com/watch?v=hSyA7tcNaCE&t=1540s) +- [38:25 - публикация новой версии пакета](https://www.youtube.com/watch?v=hSyA7tcNaCE&t=2305s) +- [55:35 - как использовать библиотеку в своем пакете](https://www.youtube.com/watch?v=hSyA7tcNaCE&t=3335s) +- [1:14:40 - обзор репозиториев Тимура, Metarhia и HowProgrammingWorks](https://www.youtube.com/watch?v=hSyA7tcNaCE&t=4480s) ## [Базовый синтаксис JavaScript](https://youtu.be/xJn3k1f4BiM) From 4e5aa167b140fe14984e55932704429cd323853d Mon Sep 17 00:00:00 2001 From: Tima Gixe <60817786+timagixe@users.noreply.github.com> Date: Thu, 5 Jan 2023 14:01:52 +0200 Subject: [PATCH 053/217] Update LICENSE --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index f24dbdd..30ab0df 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2017-2022 How.Programming.Works contributors +Copyright (c) 2017-2023 How.Programming.Works contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 68e24a9a98f995dfbbacc0dccde0cd0a0f4d1b50 Mon Sep 17 00:00:00 2001 From: Tima Gixe Date: Mon, 9 Jan 2023 10:54:12 +0200 Subject: [PATCH 054/217] Add time codes to basic syntax seminar --- Courses/Fundamentals-timecodes.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Courses/Fundamentals-timecodes.md b/Courses/Fundamentals-timecodes.md index c46ec77..8f56e55 100644 --- a/Courses/Fundamentals-timecodes.md +++ b/Courses/Fundamentals-timecodes.md @@ -171,6 +171,19 @@ ## [Семинар: Базовый синтаксис языка JavaScript](https://youtu.be/PGqjTXQe_qw) +- [0:45 - разница между обычными функциями и стрелочными](https://www.youtube.com/watch?v=PGqjTXQe_qw&t=45s) +- [10:35 - рассматриваем отличия на примерах кода](https://www.youtube.com/watch?v=PGqjTXQe_qw&t=635s) +- [16:15 - поле функционального типа и метод](https://www.youtube.com/watch?v=PGqjTXQe_qw&t=975s) +- [18:15 - хеш-таблицы](https://www.youtube.com/watch?v=PGqjTXQe_qw&t=1095s) +- [19:55 - поднятие (hoisting)](https://www.youtube.com/watch?v=PGqjTXQe_qw&t=1195s) +- [21:45 - среда разработки Тимура](https://www.youtube.com/watch?v=PGqjTXQe_qw&t=1305s) +- [23:30 - что такое говнокод](https://www.youtube.com/watch?v=PGqjTXQe_qw&t=1410s) +- [24:32 - декомпозиция](https://www.youtube.com/watch?v=PGqjTXQe_qw&t=1472s) +- [26:35 - что такое Node.JS](https://www.youtube.com/watch?v=PGqjTXQe_qw&t=1595s) +- [29:54 - скорость программ и как мы её повышаем](https://www.youtube.com/watch?v=PGqjTXQe_qw&t=1794s) +- [30:34 - приложения для мобилок на Node.JS](https://www.youtube.com/watch?v=PGqjTXQe_qw&t=1834s) +- [32:25 - для чего нужен 'use strict'](https://www.youtube.com/watch?v=PGqjTXQe_qw&t=1945s) +- [33:35 - сервер в интернете для запуска Node.JS](https://www.youtube.com/watch?v=PGqjTXQe_qw&t=2015s) ## [Семинар: автоматическая проверка лабораторных работ](https://youtu.be/M4KpG0LEAyA) From f946ba078e1cc2e60052f2b3f0e1995a665660c9 Mon Sep 17 00:00:00 2001 From: Tima Gixe Date: Sun, 15 Jan 2023 20:20:21 +0200 Subject: [PATCH 055/217] Add time codes for auto lab checking workshop --- Courses/Fundamentals-timecodes.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Courses/Fundamentals-timecodes.md b/Courses/Fundamentals-timecodes.md index 8f56e55..445f444 100644 --- a/Courses/Fundamentals-timecodes.md +++ b/Courses/Fundamentals-timecodes.md @@ -187,6 +187,16 @@ ## [Семинар: автоматическая проверка лабораторных работ](https://youtu.be/M4KpG0LEAyA) +- [00:01 - об программе для авто проверки тестов](https://www.youtube.com/watch?v=M4KpG0LEAyA&t=1s) +- [01:22 - как выполнять задания (лабораторные)](https://www.youtube.com/watch?v=M4KpG0LEAyA&t=82s) +- [08:44 - как запускать тесты](https://www.youtube.com/watch?v=M4KpG0LEAyA&t=524s) +- [09:30 - пример выполнения задания 2-by-value.js](https://www.youtube.com/watch?v=M4KpG0LEAyA&t=570s) +- [15:05 - как выглядят автоматические тесты](https://www.youtube.com/watch?v=M4KpG0LEAyA&t=905s) +- [18:35 - пример выполнения задания 3-by-reference.js](https://www.youtube.com/watch?v=M4KpG0LEAyA&t=1115s) +- [28:20 - как отправлять готовые задания](https://www.youtube.com/watch?v=M4KpG0LEAyA&t=1700s) +- [37:55 - обзор задания и тестов задания 4-count-types.js](https://www.youtube.com/watch?v=M4KpG0LEAyA&t=2275s) +- [42:20 - об eslint](https://www.youtube.com/watch?v=M4KpG0LEAyA&t=2540s) + ## [Введение в программирование (2 часть)](https://youtu.be/PzlLXQ3RaDs) From c91c28c4968a7f1ca66e29450eb80d6e08dd4c22 Mon Sep 17 00:00:00 2001 From: ivgrr <65467060+ivgrr@users.noreply.github.com> Date: Sat, 28 Jan 2023 18:44:42 +0200 Subject: [PATCH 056/217] Fix typo --- Practice/SEF2.ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Practice/SEF2.ru.md b/Practice/SEF2.ru.md index 84ea2cd..4c0529f 100644 --- a/Practice/SEF2.ru.md +++ b/Practice/SEF2.ru.md @@ -73,4 +73,4 @@ https://github.com/HowProgrammingWorks/Projection ## Регистрация тем - Нужно заполнить форму: https://forms.gle/u7v7nUFxamcgJ2aQ6 -- И дать мне права на редозиторий, мой аккаунт: https://github.com/tshemsedinov +- И дать мне права на репозиторий, мой аккаунт: https://github.com/tshemsedinov From e574067e5e58c406f441199ed629c821c5f32de0 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 2 Feb 2023 18:09:05 +0200 Subject: [PATCH 057/217] Add latest live --- Courses/Talks.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index 608a0bc..15f89e3 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -2,6 +2,10 @@ ## Future talks +## 2023 + +- [Стрим про образование программиста с Тимуром Шемсединовым и Сергеем Немчинским](https://www.youtube.com/live/pcwccVihgeg?feature=share) + ## 2022 - [Интервью на 5 часов на канале ITBEARD](https://youtu.be/0xtEdIy2j88) From 6af448137d7f2b7d55dd13a776540942ab375822 Mon Sep 17 00:00:00 2001 From: Anton Telichenko Date: Sun, 5 Feb 2023 20:08:43 +0100 Subject: [PATCH 058/217] Weekly call index update PR-URL: https://github.com/HowProgrammingWorks/Index/pull/97 --- Archive/WeeklyCall.md | 107 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) diff --git a/Archive/WeeklyCall.md b/Archive/WeeklyCall.md index bf74e99..da6ca21 100644 --- a/Archive/WeeklyCall.md +++ b/Archive/WeeklyCall.md @@ -1176,3 +1176,110 @@ 1:22:47 code review balancing 1:35:48 почему js а не с++, нейросети ``` + +## Выпуск №83 (2022-12-03) +``` +1:06 metarhia docs +14:23 повышение уровня безопастности для доступа к административному кода +20:04 система модульности +1:16:50 пример metaschema +1:39:35 документация +1:45:22 что происходит с сессией при заходе клиента с двух табов +``` + +## Выпуск №84 (2022-12-17) +``` +0:00 новости +3:56 смысл присутствия metadomain +7:00 о 2fa с qr-кодом и аутентификации +16:42 есть ли лекция про функции и процедуры для postgresql +23:35 стримы по решению задач от Georg, менторство +31:40 как записывать видео? +54:53 применение npm workspaces +1:03:14 что делать с двумя коннекшенами одного юзера? +``` + +## Выпуск №85 (2022-12-24) +``` +0:00 новости и обновления +5:04 баг metacom с socket connection +9:00 работа над системой модульности +11:49 переезд, starlink +15:56 front для приложения +21:46 курс по ноде, запись лекций +25:00 будет ли курс соответствовать плану? +30:44 https и node.js, балансировка, go +35:02 работает ли луковичная архитектура для магазинов, складов, банков? о DDD, 1C +1:27:17 iFOBS, банки, безопасность +1:36:09 что будет включать курс по безопасности в node? +1:38:47 если отказаться от зависимостей, можем ли мы при помощи перегрузки require повысить безопасность +1:47:43 с кем работал Тимур +1:48:25 перегрузка лоадера или require, отсутствие sandbox'а, система модульности +1:54:09 есть ли open source проект на rust +``` + +## Выпуск №86 (2022-12-31) +``` +0:00 новости, release metacom +10:52 How programming works для 1 курса? о курсах +36:34 вы в своих проектах используете только metarhia? +39:00 проблемы при переходе от фреймворка к formData +53:20 PR: механизмы тестирования прикладного кода +1:05:03 mermaid +1:14:15 как сделать приложение, совместимое с обновлением npm пакетов +1:26:21 почему нельзя разделить коммуникационные паттерны (socket) и request/response (http)? agnostic подход в metarhia +``` + +## Выпуск №87 (2023-01-07) +``` +0:00 новости +6:48 стримы от Georga +11:36 Leon code review +53:36 кто-то пользовался Sentry? +53:56 Leon code review +``` + +## Выпуск №88 (2023-01-14) +``` +0:00 новости, о курсе +11:50 Georg о новой библиотеке shiftjs (https://github.com/oldbros/shiftjs), стримах, докладах +18:07 дискуссии в metatech university +23:20 issue в репозитории программы курса +26:38 issue о создании ветки с состоянием проекта на момент публикации видео к нему +45:57 о экзаменах +48:27 использование принципа преднамеренных ошибок +1:14:04 скрипты, 3 запроса для клиента +1:18:04 конфликт настроек eslint и prettier +1:25:09 вопрос о mermaid и github markdown +1:33:35 вопрос об семантически различных вариантах описания одинаковой структуры связей предметной области в ERD +1:50:43 предложение анонса для созвонов +``` + +## Выпуск №89 (2023-01-21) +``` +0:00 новости +1:10 proxy, scaffold, пример учебного проекта +15:06 о экзаменах и студентах +24:42 знают ли студенты о курсах? генерация крудов, форм, однообразный код +49:05 несовпадение контрактов методов API между клиентом и сервером в примере d-messenger +56:05 quick start документация для метархии (доклад на metarhia fwdays) +57:38 стрим Георга, prisma +``` + +## Выпуск №90 (2023-01-28) +``` +0:00 новости, B-OS, написание фронтенда проектов +37:24 когда будет готово приложение? +40:42 есть ли тз для фронтенд части учебного проекта? +43:09 есть ли пример написания на fastify? +1:01:25 работа с метаданными +``` + +## Выпуск №91 (2023-02-04) +``` +0:00 новости +2:05 как работает metacom? +2:55 презентация +9:40 как работает metacom? +28:38 презентация +``` From 8d615cb227e0052c59b9e7549adcb205cc642ffc Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 7 Feb 2023 03:02:21 +0200 Subject: [PATCH 059/217] New NodeJS intro --- Courses/NodeJS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/NodeJS.md b/Courses/NodeJS.md index b05ff46..cee282c 100644 --- a/Courses/NodeJS.md +++ b/Courses/NodeJS.md @@ -30,7 +30,7 @@ ## Введение и основы -- [Node.js Введение в технологию](https://youtu.be/WBcHgaoHh1k) +- [Node.js Введение в технологию](https://youtu.be/mRvzgBGLVyM) - [Node.js in 2021: новости платформы и вызовы на следующее десятилетие](https://youtu.be/nnB7ADYso8s) - Слайды: https://www2.slideshare.net/tshemsedinov/nodejs-in-2021 - Семинар с ответами на вопросы и обсуждением: https://youtu.be/zYRDhxj0zhQ From 97d088f435038c38d2e58993a98e3bfa712cc9c2 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 28 Feb 2023 21:17:17 +0200 Subject: [PATCH 060/217] Create Projects.md --- Practice/Projects.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Practice/Projects.md diff --git a/Practice/Projects.md b/Practice/Projects.md new file mode 100644 index 0000000..1334667 --- /dev/null +++ b/Practice/Projects.md @@ -0,0 +1,25 @@ +# Projects for 1st year + +- Abstractions (class, prototype, function, functor, module, pattern, on other complex abstraction) for: + - Data structures: specific lists, trees, or graphs with methods for traversal and iteration + - Algorythms: implementation of known math or phisics calculations, data manipulations, etc. + - Access to I/O devices, operation system, other applications, timers and different sensors +- Syntax sugar for any programming language to express domain processes in expessive and simple way +- DSL (Domain specific language) runtime, interpreter, compiler, linter, style fixers and tools +- Games: web, console, mobile of any kind but with good patterns, project structure and code style +- Parsing tools for any formal or informal language +- Crawler and search engines +- Examples, tests and documentation for lectures, frameworks, and libraries +- Fixes, contribution, features, and bug-reproduction reports for open-soouce projects +- System programming + - Data access abstractions, repository implementation, query builder for persistent queue, column or relational db + - Network protocols for message passing, rpc, api, rest or stateful, + - Reactive abstarctions + - Asynchronous programming abstractions + - Parallel programming abstractions +- Applied applications, their subsystems, or separate modules + - CRM, ERP, SCM, Warehouse systems, + - Medical information systems + - Production automation and management information systems + - Any other custom-made information systems +- Your own project From 9b651e832aa888a9625755760642a681a31c66a8 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 28 Feb 2023 21:21:41 +0200 Subject: [PATCH 061/217] Spelling --- Practice/Projects.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Practice/Projects.md b/Practice/Projects.md index 1334667..7f471eb 100644 --- a/Practice/Projects.md +++ b/Practice/Projects.md @@ -1,20 +1,20 @@ -# Projects for 1st year +# Practical projects - Abstractions (class, prototype, function, functor, module, pattern, on other complex abstraction) for: - Data structures: specific lists, trees, or graphs with methods for traversal and iteration - - Algorythms: implementation of known math or phisics calculations, data manipulations, etc. + - Algorithms: implementation of known math or physics calculations, data manipulations, etc. - Access to I/O devices, operation system, other applications, timers and different sensors -- Syntax sugar for any programming language to express domain processes in expessive and simple way +- Syntax sugar for any programming language to express domain processes in expressive and simple way - DSL (Domain specific language) runtime, interpreter, compiler, linter, style fixers and tools - Games: web, console, mobile of any kind but with good patterns, project structure and code style - Parsing tools for any formal or informal language - Crawler and search engines - Examples, tests and documentation for lectures, frameworks, and libraries -- Fixes, contribution, features, and bug-reproduction reports for open-soouce projects +- Fixes, contribution, features, and bug-reproduction reports for open-source projects - System programming - Data access abstractions, repository implementation, query builder for persistent queue, column or relational db - Network protocols for message passing, rpc, api, rest or stateful, - - Reactive abstarctions + - Reactive abstractions - Asynchronous programming abstractions - Parallel programming abstractions - Applied applications, their subsystems, or separate modules From 9897b98034efa5b23b4dfea92de63644b18d8e8d Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 15 Apr 2023 18:01:42 +0300 Subject: [PATCH 062/217] Add talk: ChatGPT for Js and Node --- Courses/Talks.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index 15f89e3..f54d8e3 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -5,6 +5,9 @@ ## 2023 - [Стрим про образование программиста с Тимуром Шемсединовым и Сергеем Немчинским](https://www.youtube.com/live/pcwccVihgeg?feature=share) +- [Применение ChatGPT в оптимизации JavaScript для NodeJS](https://youtu.be/Ebrzqj8cGUY) + +https://youtu.be/Ebrzqj8cGUY #softwareengineering #backend #frontend #programming #ai #gpt4 #gpt3 #refactoring #optimization ## 2022 From b49c0fca91819b91345111c7de62ffae51ec184c Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 15 Apr 2023 18:03:33 +0300 Subject: [PATCH 063/217] Fix prev post --- Courses/Talks.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/Courses/Talks.md b/Courses/Talks.md index f54d8e3..96950ed 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -7,8 +7,6 @@ - [Стрим про образование программиста с Тимуром Шемсединовым и Сергеем Немчинским](https://www.youtube.com/live/pcwccVihgeg?feature=share) - [Применение ChatGPT в оптимизации JavaScript для NodeJS](https://youtu.be/Ebrzqj8cGUY) -https://youtu.be/Ebrzqj8cGUY #softwareengineering #backend #frontend #programming #ai #gpt4 #gpt3 #refactoring #optimization - ## 2022 - [Интервью на 5 часов на канале ITBEARD](https://youtu.be/0xtEdIy2j88) From 4dad79727070ab089f799f4c1e5fe365a4c7aeb8 Mon Sep 17 00:00:00 2001 From: Georgiy Filippov Date: Mon, 17 Apr 2023 04:02:43 +0500 Subject: [PATCH 064/217] add links to code examples --- Courses/OOP.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Courses/OOP.md b/Courses/OOP.md index cfcc8aa..2af9252 100644 --- a/Courses/OOP.md +++ b/Courses/OOP.md @@ -2,8 +2,14 @@ - [Объектно-ориентированное программирование](https://youtu.be/r4ReQlVtfgQ) - [Структуры (struct) или записи (record)](https://youtu.be/Wb7o_kK4aH4) + - Примеры кода: https://github.com/HowProgrammingWorks/Struct - [ООП: построение абстракций, инкапсуляция и сокрытие](https://youtu.be/sQwF6-bYeDM) + - Принципы ООП: https://github.com/HowProgrammingWorks/ObjectOrientedProgramming + - Сокрытие: https://github.com/HowProgrammingWorks/InformationHiding - [ООП: наследование и полиморфизм](https://youtu.be/8OuzIAuMfjw) + - Принципы ООП: https://github.com/HowProgrammingWorks/ObjectOrientedProgramming + - Наследование: https://github.com/HowProgrammingWorks/Inheritance + - Полиморфизм: https://github.com/HowProgrammingWorks/Polymorphism - [Have Objects Failed? Или что не так с ООП?](https://youtu.be/4yO5OS0vPSw) - [Дженерики и обобщенное программирование](https://youtu.be/r6W2z3DQhoI) - Примеры кода: https://github.com/HowProgrammingWorks/Generics From 89bd33a12e2907c3a9077f93a491ca6be9b0474e Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Fri, 21 Apr 2023 15:52:48 +0300 Subject: [PATCH 065/217] Add lowcode conf --- Courses/Talks.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index 96950ed..40851a3 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -5,6 +5,7 @@ ## 2023 - [Стрим про образование программиста с Тимуром Шемсединовым и Сергеем Немчинским](https://www.youtube.com/live/pcwccVihgeg?feature=share) +- [«No Code, No Conference» 2023-03-16](https://flowmates.org/) - [Применение ChatGPT в оптимизации JavaScript для NodeJS](https://youtu.be/Ebrzqj8cGUY) ## 2022 From a927ef4fd046efef402340ea1ee705a15e0f8612 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Fri, 21 Apr 2023 15:57:35 +0300 Subject: [PATCH 066/217] Add Web Summit --- Courses/Talks.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index 40851a3..92973b5 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -20,6 +20,7 @@ - [Backend на Node.js и почему TypeScript может навредить - Anywhere Club](https://youtu.be/VmKl4kAGitc) - [Асинхронный JS, однопоточный NodeJS, event loop и libuv - IT-Kamasutra](https://youtu.be/ND5HNHicACI) - [Укрінформ: Презентація METATECH](https://youtu.be/Oz8E0mbdDec) +- [Web Summit 2022: QOTEQ lowcode platform presentation](https://websummit.com/) ## 2021 From d80c95dfe7f9e5c7ffc69fe91808c09e634f04e8 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Fri, 28 Apr 2023 15:37:24 +0300 Subject: [PATCH 067/217] Create Proposal-2023.md --- Courses/Proposal-2023.md | 79 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 Courses/Proposal-2023.md diff --git a/Courses/Proposal-2023.md b/Courses/Proposal-2023.md new file mode 100644 index 0000000..46a8962 --- /dev/null +++ b/Courses/Proposal-2023.md @@ -0,0 +1,79 @@ +## Мультипарадигмене програмування + +1. Імперативний та декларативний підхід +2. Структуроване та неструктуроване програмування +3. Процедурне програмування +4. Функціональне програмування +5. Програмування на базі подій та реактивне програмування +6. Об'єктно-орієнтоване програмування +7. Прототипне програмування +8. Узагальнене програмування +9. Автоматне програмування, скінченні автомати (машини станів) +10. Спеціалізовані мови для предметних областей (DSL) +11. Програмування на потоках даних +12. Метапрограмування +13. Динамічна інтерпретація метамоделі +14. Поєднання декількох парадигм у одному коді + +## Основи програмування + +1. Базові концепції, синтаксис та семантика мов C, C++, JavaScript та Python +2. Стан застосунку, структури даних та колекції +3. Підходи до роботи зі станом: stateful and stateless +4. Структури даних: стек, черга, дек, дерева та графи +5. Проекції та відображення наборів даних +6. Оцінка обчислювальної складності +7. Що таке технологічний стек +8. Середовище розробки та налагодження коду +9. Ітерування: рекурсія, ітератори та генератори +10. Структура додатку: файли, модулі, компоненти +11. Об'єкт, прототип та клас +12. Часткове застосування та каррування, композиція функцій +13. Чейнінг для методів та функцій, домішки (mixins), мемоізація, фабрики +14. Залежності та бібліотеки +15. Антипатерни, ревью коду та рефакторинг +16. Угоди та стандарти +17. Тестування +18. Події, таймери +19. Регулярні вирази +20. Інтроспекція та рефлексія, серіалізація та десеріалізація + +## Асинхронне програмування + +1. Паралельне програмування, загальна пам'ять та примітиви синхронізації +2. Асинхронні примітиви: Thenable, Promise, Future, Deferred +3. Співпрограми, горутіни, async/await +4. Адаптери між асинхронними контрактами +6. Асинхронна та паралельна сумісність +7. Підхід до передачі повідомлень та модель акторів +8. Асинхронна черга та асинхронні колекції +9. Lock-free структури даних +10. I/O(введення-виведення) та файли + +## Архітектура програмних систем + +1. Декомпозиція, іменування та зв'язування +2. Взаємодія між компонентами ПЗ +3. Зв'язування через простори імен +4. Взаємодія за допомогою викликів та колбеків +5. Взаємодія за допомогою подій та повідомлень +6. Інтерфейси, протоколи та контракти +7. Цибулева (onion) або багатошарова архітектура +8. Аналіз ризиків, слабкі сторони, нефункціональні вимоги +9. Координація та корегування процесу +10. Безперервна інтеграція та розгортання +11. Багатоаспектна оптимізація +12. Основи паралельних обчислень +12. Бази даних та постійне зберігання +13. Ключ-значення та інші абстрактні структури даних +14. Реляційна модель даних та ER-діаграми +15. Безсхемні, об'єктно- та документо-орієнтовані бази даних +16. Ієрархічна модель даних та графові бази даних +17. Колонкові бази даних та in-memory бази даних +18. Розподілені системи +19. Міжпроцесна взаємодія +20. Безконфліктні репліковані типи даних (CRDT) +21. Узгодженість, доступність та розподіленість +22. Стратегії вирішення конфліктів +23. Протоколи консенсусу +24. CQRS, EventSourcing From a7f6927afaab6ebaa83fa5ee1a483295e8a24674 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 30 Apr 2023 13:39:23 +0300 Subject: [PATCH 068/217] Update Proposal-2023.md --- Courses/Proposal-2023.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/Courses/Proposal-2023.md b/Courses/Proposal-2023.md index 46a8962..219a1c8 100644 --- a/Courses/Proposal-2023.md +++ b/Courses/Proposal-2023.md @@ -77,3 +77,30 @@ 22. Стратегії вирішення конфліктів 23. Протоколи консенсусу 24. CQRS, EventSourcing + +## Корпоративні інформаційні системи + +1. Введення в технологію Node.js, огляд вбудованого API +2. Асинхронне програмування в Node.js +3. Робота з файлами, буферами та файловими потоками в Node.js +4. Спостереження за файловою системою в Node.js +5. Структура та архітектура додатків +6. Модулі ECMA, Common.js, Module API +7. Модулі та пакети, використання package.json та node_modules +8. Межпроцессное взаємодія (IPC), воркер-треди +9. Domain Driven Design для інформаційних систем +10. Фреймворк-агностік та транспорт-агностік підходи +11: Ізоляція коду та впровадження залежностей +12: Застосування принципів GRASP, SOLID, DDD, LoD, GoF +13. Розробка серверів додатків і API на Node.js +14. Клієнт-сервер на Node.js, протоколи TCP і UDP, DNS +15. Сервер HTTP, HTTP/2, HTTP/3: маршрутизація, кластер, IP sticky +16. HTTP сесії і файли cookie, fetch API, WebSocket, віддача статики +17. Скаффолдинг для API, UI та даних +18. Високонавантажені та розподілені додатки +19. Робота з базами даних, слой доступу до даних, курсор, транзакція +20. Memory leaks в Node.js і JavaScript, збірка мусора і профілювання +21. Atomics, SharedArrayBuffer, worker_threads в Node.js +22. Безпека, надійність та управління інфраструктурою +23. Тулінг: логування, graceful shutdown, CI, CD +24. Serverless хмари (FaaS) та ізоляція контекстів From 3d36c57eae3d0dc5d2fbde0f54089acf528dd68f Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 8 May 2023 01:53:16 +0300 Subject: [PATCH 069/217] Update Proposal-2023.md --- Courses/Proposal-2023.md | 69 ++++++++++++++++++++++++---------------- 1 file changed, 42 insertions(+), 27 deletions(-) diff --git a/Courses/Proposal-2023.md b/Courses/Proposal-2023.md index 219a1c8..65d626d 100644 --- a/Courses/Proposal-2023.md +++ b/Courses/Proposal-2023.md @@ -7,48 +7,63 @@ 5. Програмування на базі подій та реактивне програмування 6. Об'єктно-орієнтоване програмування 7. Прототипне програмування -8. Узагальнене програмування +8. Узагальнене програмування та дженеріки 9. Автоматне програмування, скінченні автомати (машини станів) -10. Спеціалізовані мови для предметних областей (DSL) -11. Програмування на потоках даних -12. Метапрограмування -13. Динамічна інтерпретація метамоделі -14. Поєднання декількох парадигм у одному коді +10. Модель акторів +11. Спеціалізовані мови для предметних областей (DSL) +12. Програмування на потоках даних +13. Метапрограмування +14. Динамічна інтерпретація метамоделей +15. Мультипарадигмене програмування та поєднання декількох парадигм +16. Контрактне прорамування +17. Компонентний підхід +18. Паралельне та асинхронне програмування -## Основи програмування +## Веб програмування для бекенд та фронтенд -1. Базові концепції, синтаксис та семантика мов C, C++, JavaScript та Python +1. Базові концепції, синтаксис та семантика мов JavaScript та TypeScript 2. Стан застосунку, структури даних та колекції 3. Підходи до роботи зі станом: stateful and stateless -4. Структури даних: стек, черга, дек, дерева та графи +4. Структури даних у JavaScript: стек, черга, дек, дерева та графи 5. Проекції та відображення наборів даних -6. Оцінка обчислювальної складності -7. Що таке технологічний стек +6. Оцінка обчислювальної складності та оптимызація виконання у v8 +7. Що таке технологічний стек та огляд стеків для веб 8. Середовище розробки та налагодження коду 9. Ітерування: рекурсія, ітератори та генератори -10. Структура додатку: файли, модулі, компоненти +10. Структура додатку: файли, модулі, компоненти, системи модульності 11. Об'єкт, прототип та клас -12. Часткове застосування та каррування, композиція функцій +12. Часткове застосування та каррування, композиція функцій у JavaScript 13. Чейнінг для методів та функцій, домішки (mixins), мемоізація, фабрики -14. Залежності та бібліотеки +14. Залежності та бібліотеки, зачеплення та зв'язність коду 15. Антипатерни, ревью коду та рефакторинг -16. Угоди та стандарти -17. Тестування -18. Події, таймери -19. Регулярні вирази +16. Угоди та стандарти, контракти +17. Тестування для бекенд та фронтенд +18. Події, таймери, лісенери +19. Регулярні вирази та BNF 20. Інтроспекція та рефлексія, серіалізація та десеріалізація ## Асинхронне програмування -1. Паралельне програмування, загальна пам'ять та примітиви синхронізації -2. Асинхронні примітиви: Thenable, Promise, Future, Deferred -3. Співпрограми, горутіни, async/await -4. Адаптери між асинхронними контрактами -6. Асинхронна та паралельна сумісність -7. Підхід до передачі повідомлень та модель акторів -8. Асинхронна черга та асинхронні колекції -9. Lock-free структури даних -10. I/O(введення-виведення) та файли +1. Огляд паралельного програмування, загальна пам'ять та примітиви синхронізації +2. Асинхронність на колбеках (функції зворотнього виклику) +3. Блокуючі та неблокуючі операції, I/O (введення-виведення) +4. Паттерни EventEmitter та AsyncEmitter +5. Асинхронні примітиви: Thenable, Promise, Future, Deferred +6. Співпрограми, горутіни, async/await +7. Адаптери між асинхронними контрактами: promisify, callbackify, asyncify +8. Асинхронна та паралельна сумісність +9. Підхід до передачі повідомлень та модель акторів +10. Асинхронна черга та асинхронні колекції +11. Асинхронні коллектори даних +12. Асинхронні генератори та ітератори +13. Обробка помилок та відміна асинхронних операцій +14. Асинхронна композиція функцій +15. Паттерн відкритий конструктор (Revealing Constructor) +16. Паттерн спостерігач (Observer + Observable) +17. Async hooks для Node.js +18. Shared memory у режимі магатопоточності Node.js +19. Асинхронний pool для worker thread у Node.js +20. Lock-free структури даних ## Архітектура програмних систем From bc49ef0c512c9d1a33f010fc15d166117d362da2 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 8 May 2023 14:11:22 +0300 Subject: [PATCH 070/217] Add videos --- Courses/Talks.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index 92973b5..f1321d3 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -90,12 +90,15 @@ ## 2019 - [Антипаттерны Node.js](https://jsfest.com.ua/jsfest2019autumn/) + - Видео: https://youtu.be/DJCzZF383ug - Слайды: https://www.slideshare.net/tshemsedinov/js-fest-2019-nodejs-antipatterns - [Разделяемая память в многопоточном Node.js. Тимур Шемсединов. JS Fest 2019 Spring](https://youtu.be/KNsm_iIQt7U) + - Видео: https://youtu.be/KNsm_iIQt7U - Слайды: https://www.slideshare.net/tshemsedinov/shared-memory-and-multithreading-in-nodejs-timur-shemsedinov-jsfest19 - DevPoint'19: Как возможно состояние гонки в однопоточном JavaScript? - Слайды: https://www.slideshare.net/tshemsedinov/how-are-race-conditions-in-single-threaded-javascript-possible - DevopsStage'19: Private cloud without vendor lock (Serverless) + - Видео: https://youtu.be/9fIOzmZ9uvI - Слайды: https://www.slideshare.net/tshemsedinov/private-cloud-without-vendor-lock-serverless - DX Day'19: How to keep control and safety in the clouds - Слайды: https://www.slideshare.net/tshemsedinov/how-to-keep-control-and-safety-in-the-clouds From 288d9d286f0312835ea6c970107479d25bd09738 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 8 May 2023 14:13:06 +0300 Subject: [PATCH 071/217] Add latest talk --- Courses/Talks.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index f1321d3..add9a72 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -7,6 +7,7 @@ - [Стрим про образование программиста с Тимуром Шемсединовым и Сергеем Немчинским](https://www.youtube.com/live/pcwccVihgeg?feature=share) - [«No Code, No Conference» 2023-03-16](https://flowmates.org/) - [Применение ChatGPT в оптимизации JavaScript для NodeJS](https://youtu.be/Ebrzqj8cGUY) +- [Прекращение поддержки Node.js 14.x и обновление до 16, 18, 20](https://youtu.be/HriGsw3IPmQ) ## 2022 From d1f49567313c391bcff8c4040017ca0a427271f2 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 15 May 2023 23:14:41 +0300 Subject: [PATCH 072/217] Add video --- Courses/Talks.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index add9a72..45b9354 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -8,6 +8,7 @@ - [«No Code, No Conference» 2023-03-16](https://flowmates.org/) - [Применение ChatGPT в оптимизации JavaScript для NodeJS](https://youtu.be/Ebrzqj8cGUY) - [Прекращение поддержки Node.js 14.x и обновление до 16, 18, 20](https://youtu.be/HriGsw3IPmQ) +- [Революция в ИТ: 2023-24, что учить, трансформация бизнеса, кого нанимать и новые профессии](https://youtu.be/hYbF3IlMovE) ## 2022 From 2e84ae15903f948437e3db3ff732c1801eef2327 Mon Sep 17 00:00:00 2001 From: Bohdan Trybel Date: Wed, 17 May 2023 10:56:55 +0200 Subject: [PATCH 073/217] Fixed typos in Proposal-2023.md --- Courses/Proposal-2023.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Courses/Proposal-2023.md b/Courses/Proposal-2023.md index 65d626d..e639c12 100644 --- a/Courses/Proposal-2023.md +++ b/Courses/Proposal-2023.md @@ -26,7 +26,7 @@ 3. Підходи до роботи зі станом: stateful and stateless 4. Структури даних у JavaScript: стек, черга, дек, дерева та графи 5. Проекції та відображення наборів даних -6. Оцінка обчислювальної складності та оптимызація виконання у v8 +6. Оцінка обчислювальної складності та оптимізація виконання у v8 7. Що таке технологічний стек та огляд стеків для веб 8. Середовище розробки та налагодження коду 9. Ітерування: рекурсія, ітератори та генератори @@ -61,7 +61,7 @@ 15. Паттерн відкритий конструктор (Revealing Constructor) 16. Паттерн спостерігач (Observer + Observable) 17. Async hooks для Node.js -18. Shared memory у режимі магатопоточності Node.js +18. Shared memory у режимі багатопоточності Node.js 19. Асинхронний pool для worker thread у Node.js 20. Lock-free структури даних @@ -102,7 +102,7 @@ 5. Структура та архітектура додатків 6. Модулі ECMA, Common.js, Module API 7. Модулі та пакети, використання package.json та node_modules -8. Межпроцессное взаємодія (IPC), воркер-треди +8. Міжпроцесна взаємодія (IPC), воркер-треди 9. Domain Driven Design для інформаційних систем 10. Фреймворк-агностік та транспорт-агностік підходи 11: Ізоляція коду та впровадження залежностей @@ -113,7 +113,7 @@ 16. HTTP сесії і файли cookie, fetch API, WebSocket, віддача статики 17. Скаффолдинг для API, UI та даних 18. Високонавантажені та розподілені додатки -19. Робота з базами даних, слой доступу до даних, курсор, транзакція +19. Робота з базами даних, шар доступу до даних, курсор, транзакція 20. Memory leaks в Node.js і JavaScript, збірка мусора і профілювання 21. Atomics, SharedArrayBuffer, worker_threads в Node.js 22. Безпека, надійність та управління інфраструктурою From 3a332d607794c7217ad857d0125b194ef7316afb Mon Sep 17 00:00:00 2001 From: Georgiy Filippov Date: Mon, 22 May 2023 12:05:26 +0500 Subject: [PATCH 074/217] Update GRASP topic and links * add missing links to code examples * separate links by topic PR-URL: https://github.com/HowProgrammingWorks/Index/pull/102 Co-authored-by: Timur Shemsedinov --- Courses/GRASP.md | 4 ++++ Courses/NodeJS.md | 10 +++------- Courses/OOP.md | 10 +++++----- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Courses/GRASP.md b/Courses/GRASP.md index 6ad776f..b7f63ed 100644 --- a/Courses/GRASP.md +++ b/Courses/GRASP.md @@ -2,6 +2,10 @@ - [GRASP принципы с адаптацией для JavaScript и Node.js](https://youtu.be/ExauFjYV_lQ) - [Принцип информационный эксперт / Information Expert](https://youtu.be/cCHL329_As0) + - Примеры кода: https://github.com/HowProgrammingWorks/InformationExpert - [Зацепление и связность / Coupling and Cohesion](https://youtu.be/IGXdPOZ3Fyk) + - Примеры кода: https://github.com/HowProgrammingWorks/CouplingCohesion - [Чистая выдумка / Pure Fabrication](https://youtu.be/CV577a0RHBM) + - Примеры кода: https://github.com/HowProgrammingWorks/PureFabrication - [Пример декомпозиции класса](https://youtu.be/4AMVQ2-2DcM) + - Примеры кода: https://github.com/metarhia/impress/blob/v2.0.0/lib/application.js diff --git a/Courses/NodeJS.md b/Courses/NodeJS.md index cee282c..e079db7 100644 --- a/Courses/NodeJS.md +++ b/Courses/NodeJS.md @@ -38,7 +38,7 @@ - Слайды: https://www.slideshare.net/tshemsedinov/nodejs-in-2019 - [Асинхронное программирование в Node.js](https://youtu.be/hY6Z6qNYzmc) - Это только обзорная лекция, ссылка на курс по асинхронному программированию - находится выше, перед оглавлением + находится выше, перед оглавлением - [Обзор встроенного Node.js API](https://youtu.be/sOkjR-N6IAs) - Ссылка на документацию: https://nodejs.org/api/documentation.html - [Настройка среды: Node.js, npm, git, eslint](https://youtu.be/hSyA7tcNaCE) @@ -71,11 +71,7 @@ - Примеры кода: https://github.com/HowProgrammingWorks/InterProcessCommunication - [Слои, связанность и связность кода](https://youtu.be/A3RpwNlVeyY) - Примеры кода: https://github.com/HowProgrammingWorks/Abstractions -- [GRASP принципы с адаптацией для JavaScript и Node.js](https://youtu.be/ExauFjYV_lQ) -- [Принцип информационный эксперт / Information Expert](https://youtu.be/cCHL329_As0) -- [Зацепление и связность / coupling and cohesion](https://youtu.be/IGXdPOZ3Fyk) -- [Чистая выдумка / Pure Fabrication](https://youtu.be/CV577a0RHBM) -- [GRASP: Пример декомпозиции класса](https://youtu.be/4AMVQ2-2DcM) +- [GRASP принципы](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/GRASP.md) ## Разработка серверов приложений и API на Node.js @@ -130,7 +126,7 @@ - Семафоры: https://github.com/HowProgrammingWorks/Semaphore - Мьютексы: https://github.com/HowProgrammingWorks/Mutex - [Разделяемая память в многопоточном Node.js](https://youtu.be/KNsm_iIQt7U) - -доклад на конференции JS Fest 2019 Spring + доклад на конференции JS Fest 2019 Spring - Слайды: https://www.slideshare.net/JSFestUA/js-fest-2019-nodejs - [Web Locks API in Node.js and browser](https://youtu.be/auMM-uV12F0) - Слайды: https://www.slideshare.net/tshemsedinov/web-locks-api diff --git a/Courses/OOP.md b/Courses/OOP.md index 2af9252..ef6995a 100644 --- a/Courses/OOP.md +++ b/Courses/OOP.md @@ -22,8 +22,8 @@ - Примеры кода: https://github.com/HowProgrammingWorks/LiskovSubstitution - [Антипаттерны объектно-ориентированного программирования](https://youtu.be/9d5TG1VsLeU) - Примеры кода: https://github.com/HowProgrammingWorks/Antipatterns/tree/master/JavaScript/03-OOP -- [GRASP принципы с адаптацией для JavaScript и Node.js](https://youtu.be/ExauFjYV_lQ) -- [Принцип информационный эксперт / Information Expert](https://youtu.be/cCHL329_As0) -- [Зацепление и связность / coupling and cohesion](https://youtu.be/IGXdPOZ3Fyk) -- [Чистая выдумка / Pure Fabrication](https://youtu.be/CV577a0RHBM) -- [GRASP: Пример декомпозиции класса](https://youtu.be/4AMVQ2-2DcM) +- [GRASP принципы](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/GRASP.md) + - Принцип информационный эксперт / Information Expert + - Зацепление и связность / Coupling and Cohesion + - Чистая выдумка / Pure Fabrication + - Пример декомпозиции класса From 1606d0a6e9cab0eb67e7fb07210818c862e41b6c Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 29 May 2023 01:03:05 +0300 Subject: [PATCH 075/217] Update NodeJS-2022-2023.md --- Courses/NodeJS-2022-2023.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/NodeJS-2022-2023.md b/Courses/NodeJS-2022-2023.md index ac8cb0d..febe9db 100644 --- a/Courses/NodeJS-2022-2023.md +++ b/Courses/NodeJS-2022-2023.md @@ -1,4 +1,4 @@ -# Технологический стек Node.js 2022-2023 +# Технологический стек Node.js 2023 Объем материала: 20 часов лекций, еженедельно 2 часа семинары в течении года, репозитории с примерами кода. Что нужно знать на входе: From 63077431b8a05bb2c5f52bb0cecdf70506ad9759 Mon Sep 17 00:00:00 2001 From: Artem Travlo Date: Sun, 23 Jul 2023 00:43:28 +0300 Subject: [PATCH 076/217] Update Talks.md (#105) Thanks @artemtr --- Courses/Talks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/Talks.md b/Courses/Talks.md index 45b9354..52affe3 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -3,7 +3,7 @@ ## Future talks ## 2023 - +- [Образование будущего: украинский взгляд | Владимир Спиваковский, Тимур Шемсединов, Николай Фельдман](https://www.youtube.com/watch?v=yFYdFZuWm8o) - [Стрим про образование программиста с Тимуром Шемсединовым и Сергеем Немчинским](https://www.youtube.com/live/pcwccVihgeg?feature=share) - [«No Code, No Conference» 2023-03-16](https://flowmates.org/) - [Применение ChatGPT в оптимизации JavaScript для NodeJS](https://youtu.be/Ebrzqj8cGUY) From 36ef3d9d852e9fe83a744030d915fb76f9307b47 Mon Sep 17 00:00:00 2001 From: Artem Travlo Date: Sun, 23 Jul 2023 00:45:47 +0300 Subject: [PATCH 077/217] Update Talks.md (#104) --- Courses/Talks.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index 52affe3..6b2080d 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -3,6 +3,8 @@ ## Future talks ## 2023 + +- [Искусственный интеллект заменяет программистов | Тимур Шемсединов, Николай Фельдман | Альфа и Омега](https://www.youtube.com/watch?v=i6vOhIor-ow) - [Образование будущего: украинский взгляд | Владимир Спиваковский, Тимур Шемсединов, Николай Фельдман](https://www.youtube.com/watch?v=yFYdFZuWm8o) - [Стрим про образование программиста с Тимуром Шемсединовым и Сергеем Немчинским](https://www.youtube.com/live/pcwccVihgeg?feature=share) - [«No Code, No Conference» 2023-03-16](https://flowmates.org/) From 38a58feb65b62bf6763525f3adfb236ce960507e Mon Sep 17 00:00:00 2001 From: Anton Telichenko Date: Sat, 22 Jul 2023 23:46:33 +0200 Subject: [PATCH 078/217] Update WeeklyCall.md (#98) Thanks @antontelichenko ! --- Archive/WeeklyCall.md | 98 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) diff --git a/Archive/WeeklyCall.md b/Archive/WeeklyCall.md index da6ca21..4360d74 100644 --- a/Archive/WeeklyCall.md +++ b/Archive/WeeklyCall.md @@ -1283,3 +1283,101 @@ 9:40 как работает metacom? 28:38 презентация ``` + +## Выпуск №92 (2023-02-09) +``` +0:00 новости, задания по проекту +9:53 12ти факторный манифест +26:14 кеширование +45:30 в каком порядке учить node? +47:54 что произошло на курсе по node в последнее время? +``` + +## Выпуск №93 (2023-02-16) +``` +0:00 новый loader +22:42 почему не используется optional chaining +28:02 разбор PR: why db is not freezed +49:35 разбор PR: write logs to the file +``` + +## Выпуск №94 (2023-02-23) +``` +3:24 Web Locks API очередь вместо массива +8:12 scheduler, sockets, web sockets +39:52 o fastify logger +``` + +## Выпуск №95 (2023-03-02) +``` +1:02 о менторах, записи к менторам, созвоны с менторами +8:38 тестирование example для metarhia +13:26 откуда приходят люди на менторскую программу? об учащихся и технологиях +39:32 каким способом автоматически делать реплику системы без доступа к source коду? +53:20 какой текущий статус metarhia? новости сообщества +1:02:09 metaschema и генерация из/в prisma +``` + +## Выпуск №96 (2023-03-09) +``` +0:00 новости, исправления в metacom, видео для курса, uuid +18:36 демонстрация нового session provider в metacom +44:02 как проходило тестирование http call в example? +1:16:03 если клиент скопирован из браузерного клиента, можно сделать динамическую генерацию клиента? +1:21:20 есть ли ментор по функциональному программированию? +``` + +## Выпуск №97 (2023-03-23) +``` +0:55 новости, объяснение класса Transport +26:12 как на 18 строке вернуть { method: expression } +42:30 вопрос о LICENSE внутри проекта, конфиг внутри проекта, metacom и context +1:02:43 chatGPT +``` + +## Выпуск №98 (2023-03-30) +``` +0:00 новости, о гитхабе и методах слияния веток +8:33 структура пакетов в metacom +29:49 нужен ли ивенту интерфейс? +33:31 нет ли инструментов для отслеживания взаимосвязи колов и ивентов? +39:00 тестовый клиент для тестов +58:18 лекция о гит +1:05:10 вынос scheduler в отдельную библиотеку +1:06:40 вынос bus из impress в отдельную библиотеку +1:14:33 metaschema с разными типами данных +``` + +## Выпуск №99 (2023-04-07) +``` +0:00 новости, metacom, планы +26:07 можно ли будет встроить gRPC через плагин? +31:30 пакеты стримов, новое поле +43:50 как лучше делать пул реквесты? +51:20 кеширование и другие фичи для metacom +58:40 как оформлять тесты на производительность +``` + +## Выпуск №100 (2023-04-13) +``` +0:00 новости, стриминг файлов, лекция о chatGPT и оптимизации +10:10 что за история с chatGPT? +42:55 пользовались ли developer mode? +49:17 metacom подходит для telegram клиента? +54:50 откуда берется staticPath в server, где место скаффолдинга в новой реализации? +1:11:08 обучение на сложных задачах +``` + +## Выпуск №101 (2023-04-20) +``` +0:00 новости, тесты, день рождения +6:20 запред миксина для модуля +27:28 runInContext, runInThisContext, runInNewContext, сендбоксы +29:48 какие есть методы для защиты от потери данных при падении сервера? +38:39 как не терять данные при отключении света или деградации производительности? +40:21 проблема при доступе к lib и domain через createSandbox +44:50 нужно ли поступать в вуз? вузовские курсы для обучения разработчиков +56:48 есть ли планы на новое видео о новых возможностях ноды? +58:22 for await на массиве с синхронным итератором +1:03:18 вызов асинхронных функций в цикле без await +``` From 23be873dba45093a86bcf41cc84abd721c0509ae Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 23 Jul 2023 05:21:45 +0300 Subject: [PATCH 079/217] Add plan for Async-2024 course --- Courses/Async-2024.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Courses/Async-2024.md diff --git a/Courses/Async-2024.md b/Courses/Async-2024.md new file mode 100644 index 0000000..5da9ec8 --- /dev/null +++ b/Courses/Async-2024.md @@ -0,0 +1,37 @@ +# Асинхронное программирование 2024 + +Те способы писать асинхронный код, которые мы использовали 10-15 лет назад безвозвратно уходят в прошлое и могут быть интересны лишь для поддержки легаси упражнения в глубоком понимании асинхронного программирования. Даже способы 5-7 летней давности уже имеют мало общего с современными практиками, но интернет полон устаревшей информации, даже [открытый курс сообщества Metarhia](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md) на сегодняшний момент стал слишком громоздким и излишним. Еще нужно упомянуть о том, что в системном и прикладном коде асинхронное программирование должно выглядеть принципиально по-разному. + +## Содержание + +Важные аспекты нового курса: + +- Концентрация на практическом применении (примеры кода из реальных проектов) +- Актуальность и соответствие стандартам по состоянию на 2024 +- Задачи и разбор их решений, семинары, ревью кода (курс это не только видео) +- Рекомендации к выбору стиля и абстракций асинхронности под задачу +- Внимание к корректной обработке ошибок во всех стилях асинхронности +- Упор на надежность, поддерживаемость, тестируемость, снижение зацепления + +Темы нового курса: + +- Контракты асинхронности на базе callback: callback-last, error-first +- Минимально необходимое понимание рантайма: event loop, I/O, таймеры +- Контракты асинхронности на базе событий: EventEmitter, Streams +- Контракт Promise и синтаксис async/await +- Конвертеры контрактов, стыковка кода в разных стилях +- Предотвращение состояния гонки по данным и управлению в асинхронном коде +- Отмена асинхронных операций: AbortController, AbortSignal +- Обработка ошибок, их выявление и возможные проблемы со стектрейсом +- Асинхронныек коллекции (собираем значения до готовности) + +## Обратите внимание + +Что нужно знать и уметь на входе: + +- [Синтаксис JavaScript, но можно без всяких триков](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Fundamentals.md) +- Уверенно владеть git, иметь github аккаунт +- Желательно docker, иметь рабочую машину на linux или mac +- Любая среда разработки, IDE или редактор + +Чем это курс не является: это не чтение документации, не курс по библиотекам и фреймворкам, не повторение старого курса, не лайвкодинг и не мастеркласс, не стрим. Новый курс - это максимально сконцентрированная информация и практические задачи как для прикладного, так и для системного программирования со сравнением этих подходов. From 4e14e37b50f134e05ee29c8fd9b2f3baa0cbcf0e Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Fri, 1 Sep 2023 11:15:00 +0300 Subject: [PATCH 080/217] Comment about taxes --- Courses/NodeJS-2022-2023.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/NodeJS-2022-2023.md b/Courses/NodeJS-2022-2023.md index febe9db..132f756 100644 --- a/Courses/NodeJS-2022-2023.md +++ b/Courses/NodeJS-2022-2023.md @@ -47,7 +47,7 @@ # Доступ -План «Expert» на 1 год за $204 на Patreon. +План «Expert» на 1 год за $204 (+ локальные налоги) на Patreon. Помесячная подписка «Expert» не дает доступа. Доступ к матераиалам курса остается и после завершения подписки. From a20eacfbf2626220cde40474cbf74688899a38c0 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 5 Sep 2023 23:51:51 +0300 Subject: [PATCH 081/217] Add new lectures --- Courses/Asynchronous.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Courses/Asynchronous.md b/Courses/Asynchronous.md index 385b675..0163388 100644 --- a/Courses/Asynchronous.md +++ b/Courses/Asynchronous.md @@ -1,6 +1,6 @@ # Асинхронное программирование -Объем материала: 24 лекции, 27 репозиториев с примерами кода. +Объем материала: 26 лекции, 28 репозиториев с примерами кода. [Для части лекций есть таймкоды и подробное оглавление](Asynchronous-timecodes.md) @@ -62,3 +62,4 @@ - Async hooks - [Разделяемая память в многопоточном Node.js](https://youtu.be/KNsm_iIQt7U) - [Асинхронный пул для worker thread pool в Node.js](https://youtu.be/Jj5KZRq4wYI) +- Асинхронное программирование из [лекции введения в Node.js](https://www.youtube.com/watch?v=mRvzgBGLVyM) From f2ba019d595c89a7b0a46eb3063c8230939c3cea Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 7 Sep 2023 10:14:54 +0300 Subject: [PATCH 082/217] Update async course --- Courses/Async-2024.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Courses/Async-2024.md b/Courses/Async-2024.md index 5da9ec8..7fdafa1 100644 --- a/Courses/Async-2024.md +++ b/Courses/Async-2024.md @@ -1,24 +1,26 @@ # Асинхронное программирование 2024 -Те способы писать асинхронный код, которые мы использовали 10-15 лет назад безвозвратно уходят в прошлое и могут быть интересны лишь для поддержки легаси упражнения в глубоком понимании асинхронного программирования. Даже способы 5-7 летней давности уже имеют мало общего с современными практиками, но интернет полон устаревшей информации, даже [открытый курс сообщества Metarhia](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md) на сегодняшний момент стал слишком громоздким и излишним. Еще нужно упомянуть о том, что в системном и прикладном коде асинхронное программирование должно выглядеть принципиально по-разному. +Те способы писать асинхронный код, которые мы использовали 10-15 лет назад безвозвратно уходят в прошлое и могут быть интересны лишь для поддержки легаси упражнения в глубоком понимании асинхронного программирования. Даже способы 5-7 летней давности уже имеют мало общего с современными практиками, но интернет полон устаревшей информации, даже [открытый курс сообщества Metarhia](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md) на сегодняшний момент стал слишком громоздким и излишним. Еще нужно упомянуть о том, что в системном и прикладном коде асинхронное программирование должно выглядеть принципиально по-разному. Полностью скрыть от продуктового разработчика сложность асинхронного кода за абстракциями не удастся, потому, что он в любом случае будет работать с таймерами, событиями, стримами, fetch и другими асинхронными API, но его можно писать в десятки раз проще, чем асинхронный код с системном слое. Что касается системного слоя, то нужно вводить в обиход теорию очередей (системы массового обслуживания), модель акторов, часть абстракций из параллельного программирования (семафоры, рандеву, атомарные операции). Конечно, содержать все это в одном курсе сложновато, поэтому, мы отдадим приоритет прикладному коду и сначала полностью подготовим курс для применения асинхронного программирования в продуктовой разработке, а потом будем добавлять необязательные темы их старого курса и много других полезных абстракций, широко распространенных в других языках программирования, но слабо известных в мире JavaScript. ## Содержание Важные аспекты нового курса: - Концентрация на практическом применении (примеры кода из реальных проектов) -- Актуальность и соответствие стандартам по состоянию на 2024 +- Актуальность и соответствие стандартам по состоянию на 2023-2024 - Задачи и разбор их решений, семинары, ревью кода (курс это не только видео) - Рекомендации к выбору стиля и абстракций асинхронности под задачу - Внимание к корректной обработке ошибок во всех стилях асинхронности - Упор на надежность, поддерживаемость, тестируемость, снижение зацепления +- Примеры и задачи по исправлению скрытых проблемных состояний и data races Темы нового курса: - Контракты асинхронности на базе callback: callback-last, error-first - Минимально необходимое понимание рантайма: event loop, I/O, таймеры - Контракты асинхронности на базе событий: EventEmitter, Streams -- Контракт Promise и синтаксис async/await +- Контракт Promise/then/catch/finally и синтаксис async/await +- Параллельное и последовательное исполнение, all/any/race/allSettled - Конвертеры контрактов, стыковка кода в разных стилях - Предотвращение состояния гонки по данным и управлению в асинхронном коде - Отмена асинхронных операций: AbortController, AbortSignal From 4e7b4ec5e5edc30d4b436724ea9f6a6c0019ff73 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 14 Sep 2023 21:42:44 +0300 Subject: [PATCH 083/217] Add LLM talk --- Courses/Talks.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index 6b2080d..8f7ee75 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -11,6 +11,9 @@ - [Применение ChatGPT в оптимизации JavaScript для NodeJS](https://youtu.be/Ebrzqj8cGUY) - [Прекращение поддержки Node.js 14.x и обновление до 16, 18, 20](https://youtu.be/HriGsw3IPmQ) - [Революция в ИТ: 2023-24, что учить, трансформация бизнеса, кого нанимать и новые профессии](https://youtu.be/hYbF3IlMovE) +- [How to use LLMs in Software Development and its limits](https://www.aintelligence.tech/en/schedule) at Artificial Intelligence: Challenges and Opportunities for Ukraine. 14 Sep + +September 14, 2023 at 4:00 PM ## 2022 From c54af29a863e18dbe699e265157dfc6ea0d5050e Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 14 Sep 2023 21:57:43 +0300 Subject: [PATCH 084/217] Add Metarhia Business Owners club events --- Courses/Talks.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index 8f7ee75..24d122b 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -12,6 +12,8 @@ - [Прекращение поддержки Node.js 14.x и обновление до 16, 18, 20](https://youtu.be/HriGsw3IPmQ) - [Революция в ИТ: 2023-24, что учить, трансформация бизнеса, кого нанимать и новые профессии](https://youtu.be/hYbF3IlMovE) - [How to use LLMs in Software Development and its limits](https://www.aintelligence.tech/en/schedule) at Artificial Intelligence: Challenges and Opportunities for Ukraine. 14 Sep +- [Metarhia Business Owners club # 1 - Запуск сообщества бизнесовнеров продуктов, стартапов, компаний](https://youtu.be/T0zMsmfxo0c) +- [Metarhia Business Owners club # 2 - Новости, образование, документация, лоукод](https://youtu.be/pMC-NjKD-6E) September 14, 2023 at 4:00 PM From be5e2e72b0c018ff4a56bd65750c09fbff29bab0 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 14 Sep 2023 21:59:10 +0300 Subject: [PATCH 085/217] Update Talk at Alpha --- Courses/Talks.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index 24d122b..129790e 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -14,6 +14,7 @@ - [How to use LLMs in Software Development and its limits](https://www.aintelligence.tech/en/schedule) at Artificial Intelligence: Challenges and Opportunities for Ukraine. 14 Sep - [Metarhia Business Owners club # 1 - Запуск сообщества бизнесовнеров продуктов, стартапов, компаний](https://youtu.be/T0zMsmfxo0c) - [Metarhia Business Owners club # 2 - Новости, образование, документация, лоукод](https://youtu.be/pMC-NjKD-6E) +- [Тотальная цифровизация минобороны: вызовы команды нового министра | Шемсединов, Фельдман](https://www.youtube.com/live/dPXvdpNzLx4) September 14, 2023 at 4:00 PM From a8542416b95f4a61500707ce0d9a34d709fc4026 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Fri, 15 Sep 2023 16:51:19 +0300 Subject: [PATCH 086/217] Create Fundamentals-2023.md --- Courses/Fundamentals-2023.md | 136 +++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 Courses/Fundamentals-2023.md diff --git a/Courses/Fundamentals-2023.md b/Courses/Fundamentals-2023.md new file mode 100644 index 0000000..20c4170 --- /dev/null +++ b/Courses/Fundamentals-2023.md @@ -0,0 +1,136 @@ +# Основи програмування + +- Автор: https://github.com/tshemsedinov +- Завдання з курсу: https://github.com/HowProgrammingWorks/Index/blob/master/Practice/SEF1.ru.md +- Словник термінів: https://github.com/HowProgrammingWorks/Dictionary +- Для частини лекцій є таймкод і докладний зміст: Fundamentals-timecodes.md + +- ⭐ - Нові спрощені лекції +- ✨ - Старі але важливі лекції +- 🧑‍💻 - Приклади коду +- 🧩 - Необов'язкові лекції + +## Перший семестр + +- Введення та огляд метеріалу + - ⭐ Новий вступ + - 🧩 [Введення у програмування](https://youtu.be/5Gt61EX6HZ4) + - 🧩 [Введення у програмування, продовження](https://youtu.be/PzlLXQ3RaDs) + - 🧩 [Мови програмування](https://youtu.be/enHA1CRkJe0) + - 🧩 Семінар: [JavaScript, відповіді на запитання](https://youtu.be/wqkQ6eslyzY) + - 🧩 [История развития языков программирования](https://youtu.be/qqz0VSaNxuw) + - 🧩 [Парадигмы программирования](https://youtu.be/Yk1sxLVHfjs) + - ✨ [Базовий синтаксис JavaScript](https://youtu.be/xJn3k1f4BiM) + - ✨ [Базовий синтаксис JavaScript, продовження](https://youtu.be/qa-XleqA0JU) + - 🧩 Семінар: [Базовий синтаксис мови JavaScript](https://youtu.be/PGqjTXQe_qw) + - 🧑‍💻 Абстракції та їх перевикористання: https://github.com/HowProgrammingWorks/Reusable + - 🧑‍💻 Основні конструкції: https://github.com/HowProgrammingWorks/Cheatsheet +- Ідентифікатори та значення + - ⭐ [Ідентифікатори, змінні та константи](https://youtu.be/Ljj8HyUIPUA) + - ⭐ [Літарали, значення та типи даних](https://youtu.be/yf58Lmr_J90) + - 🧑‍💻 Типи даних: https://github.com/HowProgrammingWorks/DataTypes +- Функції + - ⭐ [Функції, блоки та область видимості змінних](https://youtu.be/h5IvZh5QHEM) + - ✨ [Функції, стрілочні функції, контексти, замикання JavaScript](https://youtu.be/pn5myCmpV2U) + - 🧑‍💻 Функції: https://github.com/HowProgrammingWorks/Function +- Умови + - ⭐ [Умови та розгалудження, оператор if](https://youtu.be/dhurClkDGrc) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Conditional +- Ітерування + - ⭐ [Цикли for, for..of, for..in](https://youtu.be/Ph-luU2sbdg) + - ⭐ [Цикли while, do..while](https://youtu.be/3ZC4O5dM5pY) + - ✨ [Ітерування, цикли та ітератори](https://youtu.be/lq3b5_UGJas) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Iteration +- Колекції + - ⭐ [Колекції — Array, Object](https://youtu.be/SqGoKGOZu40) + - 🧑‍💻 Масиви: https://github.com/HowProgrammingWorks/Arrays + - ✨ [Масиви, об'єкти, класи, прототипи JavaScript](https://youtu.be/VBMGnAPfmsY) + - ✨ [Массивы в JavaScript, методы Array](https://youtu.be/D1kfYBkX9FE) + - 🧑‍💻 Структури даних: https://github.com/HowProgrammingWorks/DataStructures + - ⭐ [Домішки (mixin), JSON серіалізація (serialization)](https://youtu.be/rMUB78bs26w) + - ⭐ [Множини (Set) та хеш-таблиці (Map)](https://youtu.be/1avvpS_Hqms) + - ✨ [Коллекции, множества, хеш таблицы в JavaScript](https://youtu.be/hN0wsq5LNOc) + - 🧑‍💻 Колекції: https://github.com/HowProgrammingWorks/Collections + - 🧑‍💻 Хеш таблиці: https://github.com/HowProgrammingWorks/Map + - 🧑‍💻 Множини (Set): https://github.com/HowProgrammingWorks/Set +- Практичні завдання + - ⭐ [Нові практичні завдання 1-5](https://youtu.be/4I2iL3JjFdM) + - ✨ [Налаштування середовища: Node.js, npm, git, eslint](https://youtu.be/hSyA7tcNaCE) Дивитись вибірково, що не зрозуміло – пропускайте + - ✨ Старий семінар: [Автоматична перевірка лабораторних робіт](https://youtu.be/M4KpG0LEAyA) + - ✨ Семінар: [Виконання лабораторних робіт з курсу](https://youtu.be/ikUOyFPzdJw) + - 🧑‍💻 Завдання: [Exercises.ru.md](https://github.com/HowProgrammingWorks/Introduction/blob/master/Exercises.ru.md) +- Callbacks, timers + - ⭐ [Функції зворотнього виклику (callbacks) та таймери](https://youtu.be/MFG3NaEwu70) + - 🧑‍💻 Функції зворотнього виклику: https://github.com/HowProgrammingWorks/Callbacks + - ✨ [Функції вищого порядку, колбеки, події](https://youtu.be/1vqATwbGHnc) + - 🧑‍💻 Функції вищого порядку: https://github.com/HowProgrammingWorks/HigherOrderFunction + - ✨ [Таймеры, таймауты и EventEmitter](https://youtu.be/LK2jveAnRNg) + - 🧑‍💻 Таймери: https://github.com/HowProgrammingWorks/Timers + - 🧑‍💻 EventEmitter: https://github.com/HowProgrammingWorks/EventEmitter + - 🧑‍💻 Події: https://github.com/metarhia/common/blob/master/lib/events.js +- Замикання (closures) + - ⭐ [Замикання closures, (функції + контексти)](https://youtu.be/_FranqU7420) + - ✨ [Функції, стрілочні функції, контексти, замикання JavaScript](https://youtu.be/pn5myCmpV2U) + - 🧑‍💻 Замикання (closures): https://github.com/HowProgrammingWorks/Closure + - 🧩 [Часткове застосування та curry](https://youtu.be/ND8KQ5xjk7o) + - 🧑‍💻 Часткове застосування: https://github.com/HowProgrammingWorks/PartialApplication +- Асинхронність + - ⭐ [Асинхронні функції, async, await](https://youtu.be/_3rRFN3iwsg) +- Обробка помилок + - ⭐ [Помилки (Error), та обробка exception](https://youtu.be/UmpMa-f7dM4) +- Модульність + - ⭐ [Системи модульності ESM (ECMAScript) та CJS (CommonJS)](https://youtu.be/MQepk3r41Rc) + - ⭐ [Декомпозиція програми на модулі](https://youtu.be/4SLMmET8ARM) +- Рекурсія + - ⭐ [Рекурсія, вихід з рекурсії та stack trace](https://youtu.be/bRgUmZgmXAg) + - ✨ [Рекурсія: непряма та хвостова, стек, вихід](https://youtu.be/W2skCjIgVKE) + - 🧑‍💻 Рекурсія: https://github.com/HowProgrammingWorks/Recursion +- ✨ [Робота з рядками, шаблонами та юнікодом](https://youtu.be/GcopcHQkA8M) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/String +- ✨ [Антипатерни загальні для всіх парадигм](https://youtu.be/NMUsUiFokr4) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Antipatterns/tree/master/JavaScript/01-Common +- ✨ [Консоль та командний рядок у JavaScript та Node.js](https://youtu.be/5aSZyKi5BmE) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/CommandLine +- 🧩 [Чеининг функций и объектов, обработка ошибок](https://youtu.be/PfuEfIiLX34) + - 🧑‍💻 Чеінінг: https://github.com/HowProgrammingWorks/Chaining + - 🧑‍💻 Обробка помилок: https://github.com/HowProgrammingWorks/Errors +- ✨ [Антипатерни процедурного програмування](https://youtu.be/cTv7V22mkwE) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Antipatterns/tree/master/JavaScript/02-Procedural +- ✨ [Code Review: как это и зачем](https://youtu.be/EKL6NiIQ6ZU) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/CodeReview + - Семинар: [Code Review, ответы на вопросы](https://youtu.be/AgH4OAKbmkM) +- ✨ [Структури даних: списки, стек, черга, дек](https://youtu.be/9KvA4hDDSjk) + - 🧑‍💻 Списки: https://github.com/HowProgrammingWorks/LinkedList + - 🧑‍💻 Черги: https://github.com/HowProgrammingWorks/Dequeue +- ✨ [Сериализация и десериализация в JavaScript и Node.js](https://youtu.be/GtKPniOEzh8) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Serialization +- ✨ [Рефакторинг: причины, цели, техники и процесс](https://youtu.be/z73wmpdweQ4) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Refactoring + - 🧑‍💻 Пример проекта: https://github.com/tshemsedinov/node-mysql-utilities +- 🧩 Семінар: [Вибір напряму у програмуванні](https://youtu.be/1gL627DQF4A) +- 🧩 [Proxy та Symbol](https://youtu.be/UjZjSDyi9AM) + - 🧑‍💻 Проксі: https://github.com/HowProgrammingWorks/Proxy + - 🧑‍💻 Символи: https://github.com/HowProgrammingWorks/Symbol +- ✨ [Регулярні вирази та парсинг у JavaScript](https://youtu.be/-ef2E0ozxao) + - 🧑‍💻 Примеры кода: https://github.com/HowProgrammingWorks/RegExp +- ✨ [Композиція: pipe, compose](https://youtu.be/xS9FicVrOTI) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Composition +- ✨ [Домішки: mixin, extend, Object.assign, class-mixin](https://youtu.be/NZMrJ2adEyY) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Mixin + - 🧩 Стара версія лекцій: https://youtu.be/2h9syXN5wO0 +- 🧩 [Прототипне програмування та прототипне успадкування](https://youtu.be/SzaXTW2qcJE) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/PrototypeChain + - ✨ Прототипи: https://github.com/HowProgrammingWorks/Prototype +- 🧩 [Мемоізація: memoize](https://youtu.be/H6S8QJo2Qxg) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Memoization + - 🧑‍💻 Стара версія лекцій: https://youtu.be/2h9syXN5wO0 +- 🧩 [Фабрики та пули об'єктів у JavaScript, factorify, poolify](https://youtu.be/Ax_mSvadFp8) + - 🧑‍💻 Фабрики: https://github.com/HowProgrammingWorks/Factory + - 🧑‍💻 Пули об'єктів: https://github.com/HowProgrammingWorks/Pool +- 🧩 [Функції-обгортки: wrappers](https://youtu.be/En7pWi2fSzs) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Wrapper + - 🧩 Стара версія лекцій: https://youtu.be/2h9syXN5wO0 +- 🧩 [Типізовані масиви JavaScript](https://youtu.be/tTNcqxbxhfY) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/TypedArrays +- 🧩 [Нове у JavaScript](https://youtu.be/fUjHLj8bq_Y) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/ESNext From f9184c7122cd05d1d3df9d198bf2c18b2053092c Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Fri, 15 Sep 2023 16:52:55 +0300 Subject: [PATCH 087/217] Update Fundamentals-2023.md --- Courses/Fundamentals-2023.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Courses/Fundamentals-2023.md b/Courses/Fundamentals-2023.md index 20c4170..5cac79d 100644 --- a/Courses/Fundamentals-2023.md +++ b/Courses/Fundamentals-2023.md @@ -3,12 +3,11 @@ - Автор: https://github.com/tshemsedinov - Завдання з курсу: https://github.com/HowProgrammingWorks/Index/blob/master/Practice/SEF1.ru.md - Словник термінів: https://github.com/HowProgrammingWorks/Dictionary -- Для частини лекцій є таймкод і докладний зміст: Fundamentals-timecodes.md - -- ⭐ - Нові спрощені лекції -- ✨ - Старі але важливі лекції -- 🧑‍💻 - Приклади коду -- 🧩 - Необов'язкові лекції +- Умовні позначення: + - ⭐ - Нові спрощені лекції + - ✨ - Старі але важливі лекції + - 🧑‍💻 - Приклади коду + - 🧩 - Необов'язкові лекції ## Перший семестр From 51a8d46609ae091a311b34afd9b1561d1bf5855f Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Fri, 15 Sep 2023 20:49:48 +0300 Subject: [PATCH 088/217] Create Async.uk.md --- Courses/Async.uk.md | 66 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 Courses/Async.uk.md diff --git a/Courses/Async.uk.md b/Courses/Async.uk.md new file mode 100644 index 0000000..dee815e --- /dev/null +++ b/Courses/Async.uk.md @@ -0,0 +1,66 @@ +# Асинхронне програмування + +- Автор: https://github.com/tshemsedinov +- Умовні позначення: + - ✨ - Обов'язкові лекції + - 🧑‍💻 - Приклади коду + - 🧩 - Необов'язкові лекції + - 🕑 - Застарілі лекції (не актуальні чи історічні) + +- ✨ [Асинхронне програмування (огляд)](https://youtu.be/hY6Z6qNYzmc) +- ✨ [Таймери, таймаути та EventEmitter](https://youtu.be/LK2jveAnRNg) + - 🧑‍💻 Таймери: https://github.com/HowProgrammingWorks/Timers + - 🧑‍💻 EventEmitter: https://github.com/HowProgrammingWorks/EventEmitter + - 🧑‍💻 Події: https://github.com/metarhia/common/blob/master/lib/events.js +- ✨ [Асинхронне програмування на callback`ах](https://youtu.be/z8Hg6zgi3yQ) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/AsynchronousProgramming + - 🧑‍💻 Бібліотека do: https://github.com/metarhia/do +- 🕑 [Неблокуюче асинхронне ітерування](https://youtu.be/wYA2cIRYLoA) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/NonBlocking +- 🕑 [Асинхронність із бібліотекою async.js](https://youtu.be/XQ94wQc-erU) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/AsynchronousProgramming + - 🧑‍💻 Бібліотека async.js: https://caolan.github.io/async/ +- ✨ [Асинхронність на промісах](https://youtu.be/RMl4r6s1Y8M) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Promise +- ✨ [Асинхронні функції, async/await, thenable, обробка помилок](https://youtu.be/Jdf_tZuJbHI) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/AsyncAwait +- 🧩 [Асинхронні адаптери: promisify, callbackify, asyncify](https://youtu.be/76k6_YkYRmU) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/AsyncAdapter +- ✨ [Асинхронні колектори даних](https://youtu.be/tgodt1JL6II) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Collector + - 🧑‍💻 Бібліотека metasync: https://github.com/metarhia/metasync +- 🧩 [Необроблені помилки у промісах](https://youtu.be/1Ml5NE2fsZ8) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/PromiseError +- 🕑 [Проблема асинхронного стектрейса](https://youtu.be/pfiHTx3j87Y) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/StackTrace +- ✨ [Генератори та асинхронні генератори](https://youtu.be/kvNm9D32s8s) + - 🧑‍💻 Генератори: https://github.com/HowProgrammingWorks/Generator + - 🧑‍💻 Асинхронные генераторы: https://github.com/HowProgrammingWorks/AsyncGenerator +- ✨ [Ітератори та асинхронні ітератори](https://youtu.be/rBGFlWpVpGs) + - 🧑‍💻 Итератори: https://github.com/HowProgrammingWorks/Iterator + - 🧑‍💻 Асинхронные итераторы: https://github.com/HowProgrammingWorks/AsyncIterator +- 🕑 [Скасування асинхронних операцій](https://youtu.be/T8fXlnqI4Ws) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Cancelable +- ✨ Буде нова лекція: Скасування асинхронних операцій +- 🧩 [Асинхронна композиція функцій](https://youtu.be/3ZCrMlMpOrM) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/AsyncCompose +- 🧩 [Thenable та легкий await](https://youtu.be/DXp__1VNIvI) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Thenable +- 🧩 [Конкурентна асинхронна черга](https://youtu.be/Lg46AH8wFvg) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/ConcurrentQueue +- 🧩 [Паттерн відкритий конструктор (Revealing Constructor)](https://youtu.be/leR5sXRkuJI) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/RevealingConstructor +- 🧩 [Future: Асинхронність на ф'ючерах без стану](https://youtu.be/22ONv3AGXdk) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Future +- 🕑 [Deferred: Асинхронність на диферах зі станом](https://youtu.be/a2fVA1o-ovM) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Deferred +- 🧩 [Модель акторів (Actor Model)](https://youtu.be/xp5MVKEqxY4) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/ActorModel +- 🧩 [Паттерн Спостерігач (Observer + Observable)](https://youtu.be/_bFXuLcXoXg) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Observer +- ✨ [Асинхронність на RxJS та потоки подій](https://youtu.be/0kcpMAl-wfE) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Rx +- 🧩 Буде нова лекція: Async hooks +- 🧩 [Пам'ять, що доступна з багатьох тредів у Node.js](https://youtu.be/KNsm_iIQt7U) +- 🧩 [Асинхронний пул для worker thread pool у Node.js](https://youtu.be/Jj5KZRq4wYI) +- ✨ Асинхронне програмування з лекції [введення в Node.js](https://www.youtube.com/watch?v=mRvzgBGLVyM) From c9dae55000b97b8320401ce0ce0bdf82ce01d677 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Fri, 15 Sep 2023 20:51:30 +0300 Subject: [PATCH 089/217] Update Async.uk.md --- Courses/Async.uk.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Courses/Async.uk.md b/Courses/Async.uk.md index dee815e..318445c 100644 --- a/Courses/Async.uk.md +++ b/Courses/Async.uk.md @@ -7,6 +7,8 @@ - 🧩 - Необов'язкові лекції - 🕑 - Застарілі лекції (не актуальні чи історічні) +## Програма курсу + - ✨ [Асинхронне програмування (огляд)](https://youtu.be/hY6Z6qNYzmc) - ✨ [Таймери, таймаути та EventEmitter](https://youtu.be/LK2jveAnRNg) - 🧑‍💻 Таймери: https://github.com/HowProgrammingWorks/Timers From 21e55a6c351b11c93c75e4dc756b564029a98b1f Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Fri, 15 Sep 2023 22:45:38 +0300 Subject: [PATCH 090/217] Update Fundamentals-2023.md --- Courses/Fundamentals-2023.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Courses/Fundamentals-2023.md b/Courses/Fundamentals-2023.md index 5cac79d..92b810c 100644 --- a/Courses/Fundamentals-2023.md +++ b/Courses/Fundamentals-2023.md @@ -12,7 +12,8 @@ ## Перший семестр - Введення та огляд метеріалу - - ⭐ Новий вступ + - ⭐ [Новий вступ](https://youtu.be/1lU7G46S4FA) + - ⭐ [Q&A для усіх курсів](https://youtu.be/Wm7wclbv1Ik) - 🧩 [Введення у програмування](https://youtu.be/5Gt61EX6HZ4) - 🧩 [Введення у програмування, продовження](https://youtu.be/PzlLXQ3RaDs) - 🧩 [Мови програмування](https://youtu.be/enHA1CRkJe0) From bbe8e6b915f68fef87e4a0f2e04133bc1f34b6c7 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Fri, 15 Sep 2023 22:50:01 +0300 Subject: [PATCH 091/217] Update Async.uk.md --- Courses/Async.uk.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Courses/Async.uk.md b/Courses/Async.uk.md index 318445c..8d723f3 100644 --- a/Courses/Async.uk.md +++ b/Courses/Async.uk.md @@ -9,6 +9,8 @@ ## Програма курсу +- ⭐ [Вступ та організаційні питання](https://youtu.be/vfEyRijm83g) +- ⭐ [Q&A семінар для усіх курсів](https://youtu.be/Wm7wclbv1Ik) - ✨ [Асинхронне програмування (огляд)](https://youtu.be/hY6Z6qNYzmc) - ✨ [Таймери, таймаути та EventEmitter](https://youtu.be/LK2jveAnRNg) - 🧑‍💻 Таймери: https://github.com/HowProgrammingWorks/Timers @@ -43,7 +45,7 @@ - 🧑‍💻 Асинхронные итераторы: https://github.com/HowProgrammingWorks/AsyncIterator - 🕑 [Скасування асинхронних операцій](https://youtu.be/T8fXlnqI4Ws) - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Cancelable -- ✨ Буде нова лекція: Скасування асинхронних операцій +- ⭐ Буде нова лекція: AbortController та AbortSygnal - Скасування асинхронних операцій - 🧩 [Асинхронна композиція функцій](https://youtu.be/3ZCrMlMpOrM) - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/AsyncCompose - 🧩 [Thenable та легкий await](https://youtu.be/DXp__1VNIvI) @@ -62,7 +64,7 @@ - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Observer - ✨ [Асинхронність на RxJS та потоки подій](https://youtu.be/0kcpMAl-wfE) - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Rx -- 🧩 Буде нова лекція: Async hooks +- ⭐ Буде нова лекція: Async hooks - 🧩 [Пам'ять, що доступна з багатьох тредів у Node.js](https://youtu.be/KNsm_iIQt7U) - 🧩 [Асинхронний пул для worker thread pool у Node.js](https://youtu.be/Jj5KZRq4wYI) - ✨ Асинхронне програмування з лекції [введення в Node.js](https://www.youtube.com/watch?v=mRvzgBGLVyM) From 0b3fb659568ba344bb05b94610ff3caca13530a1 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 18 Sep 2023 13:26:06 +0300 Subject: [PATCH 092/217] Create Beginners.md --- Courses/Beginners.md | 56 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 Courses/Beginners.md diff --git a/Courses/Beginners.md b/Courses/Beginners.md new file mode 100644 index 0000000..bf9f2ec --- /dev/null +++ b/Courses/Beginners.md @@ -0,0 +1,56 @@ +# Основы программирования + +- Автор: https://github.com/tshemsedinov +- Новости в телеграм канале: https://t.me/HowProgrammingWorks +- Для вопросов группа в телеграме: https://t.me/MetarhiaHPW +- Youtube: https://www.youtube.com/@MetatechEducation/playlists + +## Оглавление + +- ⭐ [Введение](https://youtu.be/2DM5I2CI4gY) +- ⭐ [Идентификаторы: переменные и константы](https://youtu.be/fb318yXGwxo) +- ⭐ [запись значений и типы данных](https://youtu.be/B1Y00zN31Yg) +- ⭐ [Функции и блоки, область видимости, контексты](https://youtu.be/JdscRDLG9A4) +- ⭐ [Условия и ветвление](https://youtu.be/O_EJ0StSnac) +- ⭐ [Циклы: for, for..of и for..in](https://youtu.be/_Jxe-WacgUs) +- ⭐ [Циклы while и do..while](https://youtu.be/wDVQrZx2dKU) +- ⭐ [Коллекции: массивы и объекты - Array и Object](https://youtu.be/dZJ97DMu2cA) +- ⭐ [Объекты: примеси и сериализация](https://youtu.be/zRr-WZB7AK8) +- 🧑‍💻 [Задачи 1-5](https://github.com/HowProgrammingWorks/Book/blob/master/content/ru/2-9-Tasks.md) +- 🧑‍💻 [Разбор решения задач 1-5](https://youtu.be/WNNJfjL3h3s) +- ⭐ [Коллекции: Множества Set и хеш-таблицы Map](https://youtu.be/OE9DxIBu-8I) +- ⭐ [Callback - функции обратного вызова и Таймеры](https://youtu.be/6eg-WMDejSM) +- ⭐ [Замыкания (closure) функция и контекст](https://youtu.be/LUd-cFkhCrY) +- ⭐ [Async/await - асинхронные функции](https://youtu.be/DrOiZBcWlKg) +- ⭐ [Ошибки (Error), исключения (exceptions), баги, throw, try/catch](https://youtu.be/MF8u1Oj64Dk) +- ⭐ [Системы модульности: ESM (ECMAScript Modules) та CJS (CommonJS)](https://youtu.be/roinnSNNgjs) +- ⭐ [Декомпозиция программы на модули](https://youtu.be/7S6TrUbFMlQ) +- ⭐ [Рекурсия (recursion), выход из нее и стек вызовов (call stack)](https://youtu.be/c1rJema94iY) +- 🧑‍💻 [Задачи: 38 примеров плохого кода для переписывания](https://github.com/HowProgrammingWorks/Exams/tree/master/Tasks) + +Продолжение будет... + +Более сложные лекции можно найти тут: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Fundamentals.md + +## Рекомендации по решению задач + +🧑‍💻 Задачи: https://github.com/HowProgrammingWorks/Exams/tree/master/Tasks + +- Код изначально работает, и выдает правильный результат, вам нужно исправлять файл, но не сломать код +- Используйте тесты из каталога `Tests` для проверки решений. +- Ваша задача улучшить: понятность кода, стиль, простоту +- Тут чеклист частых ошибок (они точно должны быть исправлены): + - Не модифицируйте входные параметры функций + - Предпочитайте стрелочные функции + - Используйте eslint и prettier с нашими настройками (см. в корне репозитория) + - Предпочтительно использвать `for..of`, реже `Array/map`, реже `for` по переменной, избегайте `for..in` и `forEach` + - Используйте промежуточные идентификаторы разделяя длинные выражения + - Предпочитайте `const`, реже используйте `let`, но никогда не используйте `var` + - Преобразуйте все магические значения в константы + - Придерживайтесь правил именования идентификаторов + - Хорошо подумайте над именами идентификаторов, чтобы при прочтении кода всем было понятно их содержимое + - Не делайте слишком длнииых функций + - Не делайте большую стопку if-выражений, вместо этого используйте массивы и объекты + - Важно не переписать с нуля, а именно пошагово улучшать + +👉 Индекс других курсов: https://github.com/HowProgrammingWorks/Index From 84830bb251bc75121762e55eb35db4d94f058dc7 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 27 Sep 2023 09:46:12 +0300 Subject: [PATCH 093/217] Update Talks.md --- Courses/Talks.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Courses/Talks.md b/Courses/Talks.md index 129790e..0b20a27 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -11,10 +11,11 @@ - [Применение ChatGPT в оптимизации JavaScript для NodeJS](https://youtu.be/Ebrzqj8cGUY) - [Прекращение поддержки Node.js 14.x и обновление до 16, 18, 20](https://youtu.be/HriGsw3IPmQ) - [Революция в ИТ: 2023-24, что учить, трансформация бизнеса, кого нанимать и новые профессии](https://youtu.be/hYbF3IlMovE) -- [How to use LLMs in Software Development and its limits](https://www.aintelligence.tech/en/schedule) at Artificial Intelligence: Challenges and Opportunities for Ukraine. 14 Sep +- [How to use LLMs in Software Development and its limits](https://youtu.be/jKSc5Tx1Au8?si=wb76W3T9swD6lsuU) at [Artificial Intelligence](https://www.aintelligence.tech/en/schedule): Challenges and Opportunities for Ukraine. 14 Sep - [Metarhia Business Owners club # 1 - Запуск сообщества бизнесовнеров продуктов, стартапов, компаний](https://youtu.be/T0zMsmfxo0c) - [Metarhia Business Owners club # 2 - Новости, образование, документация, лоукод](https://youtu.be/pMC-NjKD-6E) - [Тотальная цифровизация минобороны: вызовы команды нового министра | Шемсединов, Фельдман](https://www.youtube.com/live/dPXvdpNzLx4) +- Введение в ИТ специальности / Крымскотатарский культурный центр / 23 Sep 2023 September 14, 2023 at 4:00 PM From 8664eb62016212d00a25a4651afa79551bfcb955 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 27 Sep 2023 09:47:40 +0300 Subject: [PATCH 094/217] Remove stuff --- Courses/Talks.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/Courses/Talks.md b/Courses/Talks.md index 0b20a27..f9b6464 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -17,8 +17,6 @@ - [Тотальная цифровизация минобороны: вызовы команды нового министра | Шемсединов, Фельдман](https://www.youtube.com/live/dPXvdpNzLx4) - Введение в ИТ специальности / Крымскотатарский культурный центр / 23 Sep 2023 -September 14, 2023 at 4:00 PM - ## 2022 - [Интервью на 5 часов на канале ITBEARD](https://youtu.be/0xtEdIy2j88) From 8be1f1f38050961ec44961271bfaf361d5717ef7 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 27 Sep 2023 13:31:38 +0300 Subject: [PATCH 095/217] Add links telegram --- Courses/Async-2024.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Courses/Async-2024.md b/Courses/Async-2024.md index 7fdafa1..9cd60f8 100644 --- a/Courses/Async-2024.md +++ b/Courses/Async-2024.md @@ -37,3 +37,8 @@ - Любая среда разработки, IDE или редактор Чем это курс не является: это не чтение документации, не курс по библиотекам и фреймворкам, не повторение старого курса, не лайвкодинг и не мастеркласс, не стрим. Новый курс - это максимально сконцентрированная информация и практические задачи как для прикладного, так и для системного программирования со сравнением этих подходов. + +## Как попасть на курс + +- Новости будут в канале: https://t.me/asyncify +- Группа курса: https://t.me/asynctalks From 499d0db4b450ce7209bb34eccacf2c0bddcced6f Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 5 Oct 2023 15:20:16 +0300 Subject: [PATCH 096/217] Update Fundamentals-2023.md --- Courses/Fundamentals-2023.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Courses/Fundamentals-2023.md b/Courses/Fundamentals-2023.md index 92b810c..01cb8ef 100644 --- a/Courses/Fundamentals-2023.md +++ b/Courses/Fundamentals-2023.md @@ -58,7 +58,8 @@ - ✨ [Налаштування середовища: Node.js, npm, git, eslint](https://youtu.be/hSyA7tcNaCE) Дивитись вибірково, що не зрозуміло – пропускайте - ✨ Старий семінар: [Автоматична перевірка лабораторних робіт](https://youtu.be/M4KpG0LEAyA) - ✨ Семінар: [Виконання лабораторних робіт з курсу](https://youtu.be/ikUOyFPzdJw) - - 🧑‍💻 Завдання: [Exercises.ru.md](https://github.com/HowProgrammingWorks/Introduction/blob/master/Exercises.ru.md) + - 🧑‍💻 Підготовка середовища виконання завдань: [Exercises.ru.md](https://github.com/HowProgrammingWorks/Introduction/blob/master/Exercises.ru.md) + - 🧑‍💻 Завдання: [SEF1.ru.md](https://github.com/HowProgrammingWorks/Index/blob/master/Practice/SEF1.ru.md) - Callbacks, timers - ⭐ [Функції зворотнього виклику (callbacks) та таймери](https://youtu.be/MFG3NaEwu70) - 🧑‍💻 Функції зворотнього виклику: https://github.com/HowProgrammingWorks/Callbacks From a7acb8515353209541257336cece7b7bb2e83f87 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 6 Nov 2023 17:40:02 +0200 Subject: [PATCH 097/217] Add links to new course --- Courses/NodeJS.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Courses/NodeJS.md b/Courses/NodeJS.md index e079db7..6c742a9 100644 --- a/Courses/NodeJS.md +++ b/Courses/NodeJS.md @@ -4,7 +4,8 @@ Перед основной частью курса по Node.js нужно сначала освоить хоть частично курс по асинхронному программированию: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md -[Для части лекций есть таймкоды и подробное оглавление](NodeJS-timecodes.md) +- [Для части лекций есть таймкоды и подробное оглавление](NodeJS-timecodes.md) +- [Новый курс Node.js 2023](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/NodeJS-2022-2023.md) ## Доклады и выступления @@ -149,3 +150,5 @@ ## Вспомогательные темы - [Асинхронный пул для worker thread pool в Node.js](https://youtu.be/Jj5KZRq4wYI) + +👉 [Новый курс Node.js 2023](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/NodeJS-2022-2023.md) From 0fac31d9d8890575973ddde958f773ce0fe4e6cc Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 8 Nov 2023 23:27:03 +0200 Subject: [PATCH 098/217] Add call 3 --- Courses/Talks.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index f9b6464..63d95d5 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -14,6 +14,7 @@ - [How to use LLMs in Software Development and its limits](https://youtu.be/jKSc5Tx1Au8?si=wb76W3T9swD6lsuU) at [Artificial Intelligence](https://www.aintelligence.tech/en/schedule): Challenges and Opportunities for Ukraine. 14 Sep - [Metarhia Business Owners club # 1 - Запуск сообщества бизнесовнеров продуктов, стартапов, компаний](https://youtu.be/T0zMsmfxo0c) - [Metarhia Business Owners club # 2 - Новости, образование, документация, лоукод](https://youtu.be/pMC-NjKD-6E) +- [Metarhia Business Owners club # 3 - Документация, новые возможности, план развития платформы](https://youtu.be/8JzZ2vBhvNM) - [Тотальная цифровизация минобороны: вызовы команды нового министра | Шемсединов, Фельдман](https://www.youtube.com/live/dPXvdpNzLx4) - Введение в ИТ специальности / Крымскотатарский культурный центр / 23 Sep 2023 From e973484b52d41ee960bae855ca919692b113551b Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 8 Nov 2023 23:28:06 +0200 Subject: [PATCH 099/217] Add interview --- Courses/Talks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/Talks.md b/Courses/Talks.md index 63d95d5..6b22bdb 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -16,7 +16,7 @@ - [Metarhia Business Owners club # 2 - Новости, образование, документация, лоукод](https://youtu.be/pMC-NjKD-6E) - [Metarhia Business Owners club # 3 - Документация, новые возможности, план развития платформы](https://youtu.be/8JzZ2vBhvNM) - [Тотальная цифровизация минобороны: вызовы команды нового министра | Шемсединов, Фельдман](https://www.youtube.com/live/dPXvdpNzLx4) -- Введение в ИТ специальности / Крымскотатарский культурный центр / 23 Sep 2023 +- [Введение в ИТ специальности / Крымскотатарский ИТ канал / 23 Sep 2023](https://youtu.be/kN12mb_3PRE) ## 2022 From 08faf99f059435fe9b46cf6da1a60d753b8c1508 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 12 Nov 2023 19:33:09 +0200 Subject: [PATCH 100/217] NodeJS 2024 --- Courses/NodeJS-2024.md | 115 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 Courses/NodeJS-2024.md diff --git a/Courses/NodeJS-2024.md b/Courses/NodeJS-2024.md new file mode 100644 index 0000000..412c3f4 --- /dev/null +++ b/Courses/NodeJS-2024.md @@ -0,0 +1,115 @@ +# Технологический стек Node.js в 2024 + +Объем материала: 20 часов лекций, еженедельно 2 часа семинары в течении года, репозитории с примерами кода. +Что нужно знать на входе: +- [Синтаксис JavaScript без всяких триков](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Fundamentals.md) +- [Основы асинхронного программирования](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md) +- Уверенно владеть git, иметь github аккаунт +- Желательно docker, иметь рабочую машину на linux или mac +- Любая среда разработки, IDE или редактор + +Ссылки на старый курс: +- [Структура со ссылками на видео и репозитории с примерами кода](NodeJS.md) +- [Для части лекций есть таймкоды и подробное оглавление](NodeJS-timecodes.md) + +Чем это курс не является: это не чтение документации, не курс по фреймворкам, не курс по Metarhia, не повторение старого курса, не лайвкодинг и не мастеркласс, не стрим. Новый курс - это максимально сконцентрированная информация и практические задачи по разработке на чистой ноде но с хорошей архитектурой и использованием всех современных возможностей Node.js + +👉 Patreon: https://www.patreon.com/tshemsedinov +👉 Видео обзор курса: (готовится) +👉 Вопросы на интервью: https://github.com/tshemsedinov/NodeJS-Interview-Questions + +## Содержание + +- ⭐ [Введение в технологию 🚀](https://youtu.be/mRvzgBGLVyM) + - 🧑‍💻 [HTTP сервер для статики](https://github.com/HowProgrammingWorks/NodeServer/tree/master/native-2022) + - 🔗 [Таблица поддержки возможностей в версиях ноды](https://node.green/) + - 🔗 [Автоматизация проверки безопасности кода](https://snyk.io/) + - 🔗 [Встроенный в npm аудит безопасности](https://docs.npmjs.com/cli/v8/commands/npm-audit) + - 🧩 [Сравнение кластеризации HTTP, TCP и UDP на процессах и потоках](https://youtu.be/dum4b4EZktY) + - 🧩 [Стрим про асинхронность и фазы ивентлупа](https://youtu.be/ND5HNHicACI) +- ⭐ Структура приложений: системы модульности, пакеты и зависимости + - 💻 [Системы модульности, CommonJS, ESModules, реализация своей системы модульности](https://github.com/HowProgrammingWorks/Modularity) + - 💻 [Пакеты и их загрузка в разных системах модульности](https://github.com/HowProgrammingWorks/Packages) +- ⭐ Архитектура приложений: слои и внедрение зависимостей + - 💻 [Пошаговый рефакторинг от мидлварей до слоеной архитектуры](https://github.com/HowProgrammingWorks/DDD) + - 🧩 [Почему мидлвари это плохо](https://youtu.be/RS8x73z4csI) +- ⭐ Layers and Low Coupling на примере конфига и транспорта + - 💻 [Примеры кода "A", "B" и "C" к лекции](https://github.com/HowProgrammingWorks/DDD) +- ⭐ Базы данных, модель, заголовки .d.ts и линтеры +- ⭐ Криптография: crypto, хеширование паролей с солью, session token, UUID, случайные числа + - 💻 Реализация `randomPrefetcher` из библиотеки `metautil`: https://github.com/metarhia/metautil/blob/v3.7.0/lib/crypto.js + - 💻 Упрощенное хеширование: https://github.com/HowProgrammingWorks/DDD/blob/master/JavaScript/d-messenger/lib/common.js + - 💻 Полноценное хеширование: https://github.com/metatech-university/NodeJS-Pure/blob/main/lib/common.js + - 💻 Генерация UUID: https://nodejs.org/api/crypto.html#cryptorandomuuidoptions + - 🔗 Документация по `node:crypto`: https://nodejs.org/api/crypto.html +- ⭐ [Применение Chat GPT в оптимизации JavaScript для Node.js](https://youtu.be/Ebrzqj8cGUY) + - 💻 [Chunk encode/decode with typed arrays](https://github.com/HowProgrammingWorks/ChatGPT/tree/main/JavaScript/1-Chunk) + - 💻 [Promise chain and async code optimization](https://github.com/HowProgrammingWorks/ChatGPT/tree/main/JavaScript/2-Promise) + - 💻 [Crypto random prefetcher](https://github.com/HowProgrammingWorks/ChatGPT/tree/main/JavaScript/3-Prefetcher) +- ⭐ Структура классов сервера и GoF паттерны в Node.js +- ⭐ Подсистема `Authentication` +- ⭐ Подсистема `Role Based Access Control` + - Системы прав ACL, ABAC, RBAC, и проектирование нашей системы прав для курса +- ⭐ Стримы Readable, Writable, Transform, открытый конструктор, буферизация, backpressure + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Streams/tree/master/JavaScript +- ⭐ Инфраструктура и инструментарий: тайпинги, тестирование, линтеры, CI/CD, встроенный testing framework +- ⭐ Работа с ошибками и исключениями, `Graceful shutdown` в Node.js, `unhandled exceptions`, `async stack trace` + - 💻 Async stack trace: https://github.com/HowProgrammingWorks/StackTrace/blob/master/JavaScript/6-pass-through.js + - 💻 Graceful shutdown: https://github.com/HowProgrammingWorks/GracefulShutdown +- ⭐ Асинхронное, реактивное и параллельное программирование + - ✨ Обзор асинхронного программирования в Node.js: https://youtu.be/hY6Z6qNYzmc + - 💻 Разные контракты: https://github.com/HowProgrammingWorks/AsynchronousProgramming + - 💻 Таймеры: https://github.com/HowProgrammingWorks/Timers + - 💻 EventEmitter: https://github.com/HowProgrammingWorks/EventEmitter + - 💻 Промисы: https://github.com/HowProgrammingWorks/Promise + - 💻 Async/await: https://github.com/HowProgrammingWorks/AsyncAwait + - 💻 Асинхронные адаптеры: https://github.com/HowProgrammingWorks/AsyncAdapter + - 💻 Асинхронные итераторы: https://github.com/HowProgrammingWorks/AsyncIterator + - 💻 Thenable: https://github.com/HowProgrammingWorks/Thenable + - 💻 Асинхронная очередь: https://github.com/HowProgrammingWorks/ConcurrentQueue + - 💻 Паттерн открытый конструктор (Revealing Constructor): https://github.com/HowProgrammingWorks/RevealingConstructor +- ⭐ Работа с файлами и файловыми потоками, наблюдение за файловой системой + - ✨ Работа с файлами, буферами и файловыми потоками: https://youtu.be/eQGBS15vUac + - 💻 Работа с файлами: https://github.com/HowProgrammingWorks/Files + - 💻 Файловые потоки: https://github.com/HowProgrammingWorks/Streams + - 💻 Буферы: https://github.com/HowProgrammingWorks/Buffers + - 💻 Наблюдение за файлами: https://github.com/HowProgrammingWorks/FilesystemWatch +- ⭐ Принципы `GRASP` и `SOLID` в `JavaScript` с адаптацией для Node.js + - ✨ GRASP принципы с адаптацией для JavaScript и Node.js: https://youtu.be/ExauFjYV_lQ + - 💻 Information Expert: https://github.com/HowProgrammingWorks/InformationExpert + - 💻 Coupling and Cohesion: https://github.com/HowProgrammingWorks/CouplingCohesion + - 💻 Pure Fabrication: https://github.com/HowProgrammingWorks/PureFabrication + - 💻 Single responsibility: https://github.com/HowProgrammingWorks/SingleResponsibility + - 💻 Liskov substitution: https://github.com/HowProgrammingWorks/LiskovSubstitution + - 💻 IoC and DI: https://github.com/HowProgrammingWorks/InversionOfControl +- ⭐ Вопросы безопасности: `DoS`, `XSS`, `Path traversal`, `CSRF`, `SQL`-инъекции + - ✨ Безопасность приложений Node.js: https://youtu.be/Pdfo1G-gI6s + - 🔗 Слайды: https://www.slideshare.net/tshemsedinov/nodejs-security-199004963 +- ⭐ C/C++ Addons, Node-API (n-api), WebAssembly: Rust, WAT, C++, AssemblyScript + - 💻 N-API examples for C++ and Rust: https://github.com/HowProgrammingWorks/Node-API + - 💻 WebAssembly for C++, Rust, WAT, and AssemblyScript https://github.com/HowProgrammingWorks/WebAssembly + - 💻 In-place callback solution: https://github.com/tshemsedinov/wasm-import +- ⭐ Трекинг асинхронных контекстов: AsyncLocalStorage, AsyncResource + - 💻 Примеры использования AsyncLocalStorage и AsyncResource: https://github.com/HowProgrammingWorks/AsyncContextTracking +- ⭐ Проектирование API и проверка контрактов в рантайме + - ✨ Контрактное программирование: https://youtu.be/K5_kSUvbGEQ + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Contract +- ⭐ Вынесение подсистем как отдельных микросервисов +- ⭐ `Performance hooks`, телеметрия ресурсов и оптимизация: I/O bound, CPU bound, memory bound, профилирование +- ⭐ `Serverless` и облачные `FaaS` решения на базе Node.js + - ✨ Serverless Clouds (FaaS) и изоляция контекстов запросов в Node.js: https://youtu.be/x-Rd6fPV6L8 + - 🔗 Слайды: https://www.slideshare.net/tshemsedinov/serverless-clouds-faas-and-request-context-isolation-in-nodejs +- ⭐ Приложения, приближенные к реальному времени, Websocket, интерактивность и коллаборативные приложения + - 💻 Серверная реализация + - 💻 Клиентская реализация на C++ для Node.js 21 + - 💻 Интерактивность и коллоборативные приложения +- ⭐ Распределенные системы, высоконагруженные системы, балансировка нагрузки, кластеризация и масштабирование, IP sticky + - ✨ Доклад по высоконагруженным системам: https://youtu.be/7tfZDABPvVs + - ✨ HTTP сервер на Node.js (routing, cluster, IP sticky): https://youtu.be/7Ufxj0oTaUo + - 💻 Примеры серверов: https://github.com/HowProgrammingWorks/NodeServer +- ⭐ Изоляция кода и данных в Node.js: `vm`, `v8`, защита `global`, контекстов, модулей и прототипов от патчинга +- ⭐ Структура и архитектура проекта, слои, `DDD`, `Clean architecture`, связанность и связность кода, протекание абстракций + +# Доступ + +План подписки формируется. Приходите через неделю. From 713c03ec59e45c7205b9c88447f9a567137f397e Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 12 Nov 2023 19:34:23 +0200 Subject: [PATCH 101/217] Update NodeJS-2024.md --- Courses/NodeJS-2024.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Courses/NodeJS-2024.md b/Courses/NodeJS-2024.md index 412c3f4..4743c9f 100644 --- a/Courses/NodeJS-2024.md +++ b/Courses/NodeJS-2024.md @@ -14,8 +14,8 @@ Чем это курс не является: это не чтение документации, не курс по фреймворкам, не курс по Metarhia, не повторение старого курса, не лайвкодинг и не мастеркласс, не стрим. Новый курс - это максимально сконцентрированная информация и практические задачи по разработке на чистой ноде но с хорошей архитектурой и использованием всех современных возможностей Node.js -👉 Patreon: https://www.patreon.com/tshemsedinov -👉 Видео обзор курса: (готовится) +👉 Patreon: https://www.patreon.com/tshemsedinov +👉 Видео обзор курса: (готовится) 👉 Вопросы на интервью: https://github.com/tshemsedinov/NodeJS-Interview-Questions ## Содержание From afd744d7858cc58389535f858a2a8cca28c53289 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 30 Nov 2023 13:42:59 +0200 Subject: [PATCH 102/217] Add NOCODE SUMMIT Almaty --- Courses/Talks.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index 6b22bdb..bdf3a07 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -8,6 +8,7 @@ - [Образование будущего: украинский взгляд | Владимир Спиваковский, Тимур Шемсединов, Николай Фельдман](https://www.youtube.com/watch?v=yFYdFZuWm8o) - [Стрим про образование программиста с Тимуром Шемсединовым и Сергеем Немчинским](https://www.youtube.com/live/pcwccVihgeg?feature=share) - [«No Code, No Conference» 2023-03-16](https://flowmates.org/) +- [Человек как преодоление пропасти между AI и программированием — NOCODE SUMMIT Almaty 2023-11-30](https://flowmates.org/no-code-summit-almaty/) - [Применение ChatGPT в оптимизации JavaScript для NodeJS](https://youtu.be/Ebrzqj8cGUY) - [Прекращение поддержки Node.js 14.x и обновление до 16, 18, 20](https://youtu.be/HriGsw3IPmQ) - [Революция в ИТ: 2023-24, что учить, трансформация бизнеса, кого нанимать и новые профессии](https://youtu.be/hYbF3IlMovE) From 8387c09e5040a3c8e186f66aed8b08ddb5d5a4b7 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 2 Dec 2023 09:57:47 +0200 Subject: [PATCH 103/217] Update NodeJS-2024.md --- Courses/NodeJS-2024.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Courses/NodeJS-2024.md b/Courses/NodeJS-2024.md index 4743c9f..e9a09f9 100644 --- a/Courses/NodeJS-2024.md +++ b/Courses/NodeJS-2024.md @@ -1,6 +1,7 @@ # Технологический стек Node.js в 2024 -Объем материала: 20 часов лекций, еженедельно 2 часа семинары в течении года, репозитории с примерами кода. +Объем материала: 20 часов основного материала + 20 часов по выбору, еженедельно 4 часа (2 раза по 2 часа) созвоны с ревью кода и ответами на вопросы в течении года, репозитории с примерами кода. + Что нужно знать на входе: - [Синтаксис JavaScript без всяких триков](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Fundamentals.md) - [Основы асинхронного программирования](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md) @@ -109,7 +110,12 @@ - 💻 Примеры серверов: https://github.com/HowProgrammingWorks/NodeServer - ⭐ Изоляция кода и данных в Node.js: `vm`, `v8`, защита `global`, контекстов, модулей и прототипов от патчинга - ⭐ Структура и архитектура проекта, слои, `DDD`, `Clean architecture`, связанность и связность кода, протекание абстракций +- ⭐ Реализация HTTP Proxy + - 📢 [Разбор примеров кода Timur Sevimli](https://youtu.be/4yF6hlxiIic) + - 💻 Примеры кода из видео: https://github.com/HowProgrammingWorks/ProxyHTTP + +План курса формируется. Тут появится еще много тем в ближайшее время. # Доступ -План подписки формируется. Приходите через неделю. +План подписки формируется. Подписывайтесь на https://t.me/metarhia и https://www.youtube.com/@TimurShemsedinov чтобы следить за новостями. From 42ef645879fdfcd00f2b4a696d5965a1b478ab12 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 2 Dec 2023 10:00:31 +0200 Subject: [PATCH 104/217] Add node.js 2024 video review --- Courses/NodeJS-2024.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/NodeJS-2024.md b/Courses/NodeJS-2024.md index e9a09f9..7892170 100644 --- a/Courses/NodeJS-2024.md +++ b/Courses/NodeJS-2024.md @@ -16,7 +16,7 @@ Чем это курс не является: это не чтение документации, не курс по фреймворкам, не курс по Metarhia, не повторение старого курса, не лайвкодинг и не мастеркласс, не стрим. Новый курс - это максимально сконцентрированная информация и практические задачи по разработке на чистой ноде но с хорошей архитектурой и использованием всех современных возможностей Node.js 👉 Patreon: https://www.patreon.com/tshemsedinov -👉 Видео обзор курса: (готовится) +👉 Видео обзор курса: https://youtu.be/moH8df67zAM 👉 Вопросы на интервью: https://github.com/tshemsedinov/NodeJS-Interview-Questions ## Содержание From ddde9e3be32ba5c8c6df44b2b62e4495e24558c3 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 2 Dec 2023 10:14:58 +0200 Subject: [PATCH 105/217] Add subscription plan for NodeJS-2024 --- Courses/NodeJS-2024.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Courses/NodeJS-2024.md b/Courses/NodeJS-2024.md index 7892170..3efce1c 100644 --- a/Courses/NodeJS-2024.md +++ b/Courses/NodeJS-2024.md @@ -118,4 +118,8 @@ # Доступ -План подписки формируется. Подписывайтесь на https://t.me/metarhia и https://www.youtube.com/@TimurShemsedinov чтобы следить за новостями. +Сейчас на курс можно записаться по плану «Expert» на 1 год за $204 (+ локальные налоги) на Patreon. Помесячная подписка «Expert» не дает доступа. Матераиалы курса остается и после завершения подписки (не нужно ее продлять все время, я не забираю доступ). Как только план курса будет сформирован и курс стартует, его цена будет выше, ориентировочно на 30%. + +👉 Подписаться: https://www.patreon.com/tshemsedinov + + Подписывайтесь на https://t.me/metarhia и https://www.youtube.com/@TimurShemsedinov чтобы следить за новостями. From bb680fc91c134653d5f4987b3aa2d2ed8cd66abd Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 2 Dec 2023 21:38:03 +0200 Subject: [PATCH 106/217] Fix spelling --- Courses/NodeJS-2024.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/NodeJS-2024.md b/Courses/NodeJS-2024.md index 3efce1c..0f3b678 100644 --- a/Courses/NodeJS-2024.md +++ b/Courses/NodeJS-2024.md @@ -13,7 +13,7 @@ - [Структура со ссылками на видео и репозитории с примерами кода](NodeJS.md) - [Для части лекций есть таймкоды и подробное оглавление](NodeJS-timecodes.md) -Чем это курс не является: это не чтение документации, не курс по фреймворкам, не курс по Metarhia, не повторение старого курса, не лайвкодинг и не мастеркласс, не стрим. Новый курс - это максимально сконцентрированная информация и практические задачи по разработке на чистой ноде но с хорошей архитектурой и использованием всех современных возможностей Node.js +Чем этот курс не является: это не чтение документации, не курс по фреймворкам, не курс по Metarhia, не повторение старого курса, не лайвкодинг и не мастеркласс, не стрим. Новый курс - это максимально сконцентрированная информация и практические задачи по разработке на чистой ноде но с хорошей архитектурой и использованием всех современных возможностей Node.js 👉 Patreon: https://www.patreon.com/tshemsedinov 👉 Видео обзор курса: https://youtu.be/moH8df67zAM From 8a01a8ea9894c8fc6c85a2f7c84829441d835b5a Mon Sep 17 00:00:00 2001 From: Sergei Mirasov <118269956+tr0hvx2u@users.noreply.github.com> Date: Mon, 25 Sep 2023 14:27:50 +0800 Subject: [PATCH 107/217] Fix typos in Beginners.md - Fixed text typos - Added link to NodejsStarterKit repo --- Courses/Beginners.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Courses/Beginners.md b/Courses/Beginners.md index bf9f2ec..44eba8c 100644 --- a/Courses/Beginners.md +++ b/Courses/Beginners.md @@ -9,7 +9,7 @@ - ⭐ [Введение](https://youtu.be/2DM5I2CI4gY) - ⭐ [Идентификаторы: переменные и константы](https://youtu.be/fb318yXGwxo) -- ⭐ [запись значений и типы данных](https://youtu.be/B1Y00zN31Yg) +- ⭐ [Запись значений и типы данных](https://youtu.be/B1Y00zN31Yg) - ⭐ [Функции и блоки, область видимости, контексты](https://youtu.be/JdscRDLG9A4) - ⭐ [Условия и ветвление](https://youtu.be/O_EJ0StSnac) - ⭐ [Циклы: for, for..of и for..in](https://youtu.be/_Jxe-WacgUs) @@ -42,14 +42,14 @@ - Тут чеклист частых ошибок (они точно должны быть исправлены): - Не модифицируйте входные параметры функций - Предпочитайте стрелочные функции - - Используйте eslint и prettier с нашими настройками (см. в корне репозитория) - - Предпочтительно использвать `for..of`, реже `Array/map`, реже `for` по переменной, избегайте `for..in` и `forEach` + - Используйте eslint и prettier с нашими настройками (см. в корне репозитория [NodejsStarterKit](https://github.com/HowProgrammingWorks/NodejsStarterKit)) + - Предпочтительно использовать `for..of`, реже `Array/map`, реже `for` по переменной, избегайте `for..in` и `forEach` - Используйте промежуточные идентификаторы разделяя длинные выражения - Предпочитайте `const`, реже используйте `let`, но никогда не используйте `var` - Преобразуйте все магические значения в константы - Придерживайтесь правил именования идентификаторов - Хорошо подумайте над именами идентификаторов, чтобы при прочтении кода всем было понятно их содержимое - - Не делайте слишком длнииых функций + - Не делайте слишком длинных функций - Не делайте большую стопку if-выражений, вместо этого используйте массивы и объекты - Важно не переписать с нуля, а именно пошагово улучшать From 30120437832ffd1ee0b8eae7c86b111a31380960 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 3 Dec 2023 11:03:04 +0200 Subject: [PATCH 108/217] Reorder Talks --- Courses/Talks.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Courses/Talks.md b/Courses/Talks.md index bdf3a07..88e0eaf 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -4,20 +4,20 @@ ## 2023 -- [Искусственный интеллект заменяет программистов | Тимур Шемсединов, Николай Фельдман | Альфа и Омега](https://www.youtube.com/watch?v=i6vOhIor-ow) -- [Образование будущего: украинский взгляд | Владимир Спиваковский, Тимур Шемсединов, Николай Фельдман](https://www.youtube.com/watch?v=yFYdFZuWm8o) - [Стрим про образование программиста с Тимуром Шемсединовым и Сергеем Немчинским](https://www.youtube.com/live/pcwccVihgeg?feature=share) +- [Введение в ИТ специальности / Крымскотатарский ИТ канал / 23 Sep 2023](https://youtu.be/kN12mb_3PRE) - [«No Code, No Conference» 2023-03-16](https://flowmates.org/) - [Человек как преодоление пропасти между AI и программированием — NOCODE SUMMIT Almaty 2023-11-30](https://flowmates.org/no-code-summit-almaty/) - [Применение ChatGPT в оптимизации JavaScript для NodeJS](https://youtu.be/Ebrzqj8cGUY) - [Прекращение поддержки Node.js 14.x и обновление до 16, 18, 20](https://youtu.be/HriGsw3IPmQ) - [Революция в ИТ: 2023-24, что учить, трансформация бизнеса, кого нанимать и новые профессии](https://youtu.be/hYbF3IlMovE) -- [How to use LLMs in Software Development and its limits](https://youtu.be/jKSc5Tx1Au8?si=wb76W3T9swD6lsuU) at [Artificial Intelligence](https://www.aintelligence.tech/en/schedule): Challenges and Opportunities for Ukraine. 14 Sep +- [How to use LLMs in Software Development and its limits](https://youtu.be/jKSc5Tx1Au8) at [Artificial Intelligence](https://www.aintelligence.tech/en/schedule): Challenges and Opportunities for Ukraine. 14 Sep - [Metarhia Business Owners club # 1 - Запуск сообщества бизнесовнеров продуктов, стартапов, компаний](https://youtu.be/T0zMsmfxo0c) - [Metarhia Business Owners club # 2 - Новости, образование, документация, лоукод](https://youtu.be/pMC-NjKD-6E) - [Metarhia Business Owners club # 3 - Документация, новые возможности, план развития платформы](https://youtu.be/8JzZ2vBhvNM) +- [Искусственный интеллект заменяет программистов | Тимур Шемсединов, Николай Фельдман | Альфа и Омега](https://www.youtube.com/watch?v=i6vOhIor-ow) +- [Образование будущего: украинский взгляд | Владимир Спиваковский, Тимур Шемсединов, Николай Фельдман](https://www.youtube.com/watch?v=yFYdFZuWm8o) и на [канале Alpha media](https://www.youtube.com/live/sVzvPqSXQ40) - [Тотальная цифровизация минобороны: вызовы команды нового министра | Шемсединов, Фельдман](https://www.youtube.com/live/dPXvdpNzLx4) -- [Введение в ИТ специальности / Крымскотатарский ИТ канал / 23 Sep 2023](https://youtu.be/kN12mb_3PRE) ## 2022 From 18db4c38fc8a796e8958e94b68bf5a2684e1d7ba Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 3 Dec 2023 11:07:00 +0200 Subject: [PATCH 109/217] Add alpha media talk --- Courses/Talks.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index 88e0eaf..f8a8447 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -18,6 +18,7 @@ - [Искусственный интеллект заменяет программистов | Тимур Шемсединов, Николай Фельдман | Альфа и Омега](https://www.youtube.com/watch?v=i6vOhIor-ow) - [Образование будущего: украинский взгляд | Владимир Спиваковский, Тимур Шемсединов, Николай Фельдман](https://www.youtube.com/watch?v=yFYdFZuWm8o) и на [канале Alpha media](https://www.youtube.com/live/sVzvPqSXQ40) - [Тотальная цифровизация минобороны: вызовы команды нового министра | Шемсединов, Фельдман](https://www.youtube.com/live/dPXvdpNzLx4) +- [Искусственный суперинтеллект уже изобретен? | Тимур Шемсединов, Владимир Бандура, Фельдман на Альфа](https://www.youtube.com/live/Z6mnu4ZqOco) ## 2022 From 71ea10abb5c54018b907976c0b4efbd70811a386 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 3 Dec 2023 11:16:32 +0200 Subject: [PATCH 110/217] Update NodeJS-2024 --- Courses/NodeJS-2024.md | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/Courses/NodeJS-2024.md b/Courses/NodeJS-2024.md index 0f3b678..d4164fb 100644 --- a/Courses/NodeJS-2024.md +++ b/Courses/NodeJS-2024.md @@ -3,15 +3,15 @@ Объем материала: 20 часов основного материала + 20 часов по выбору, еженедельно 4 часа (2 раза по 2 часа) созвоны с ревью кода и ответами на вопросы в течении года, репозитории с примерами кода. Что нужно знать на входе: -- [Синтаксис JavaScript без всяких триков](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Fundamentals.md) -- [Основы асинхронного программирования](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md) -- Уверенно владеть git, иметь github аккаунт -- Желательно docker, иметь рабочую машину на linux или mac -- Любая среда разработки, IDE или редактор +- 🔗 [Синтаксис JavaScript без всяких триков](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Fundamentals.md) +- 🔗 [Основы асинхронного программирования](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md) +- 💡 Уверенно владеть git, иметь github аккаунт +- 💡 Желательно docker, иметь рабочую машину на linux или mac +- 💡 Любая среда разработки, IDE или редактор Ссылки на старый курс: -- [Структура со ссылками на видео и репозитории с примерами кода](NodeJS.md) -- [Для части лекций есть таймкоды и подробное оглавление](NodeJS-timecodes.md) +- 🔗 [Структура со ссылками на видео и репозитории с примерами кода](NodeJS.md) +- 🔗 [Для части лекций есть таймкоды и подробное оглавление](NodeJS-timecodes.md) Чем этот курс не является: это не чтение документации, не курс по фреймворкам, не курс по Metarhia, не повторение старого курса, не лайвкодинг и не мастеркласс, не стрим. Новый курс - это максимально сконцентрированная информация и практические задачи по разработке на чистой ноде но с хорошей архитектурой и использованием всех современных возможностей Node.js @@ -118,8 +118,10 @@ # Доступ -Сейчас на курс можно записаться по плану «Expert» на 1 год за $204 (+ локальные налоги) на Patreon. Помесячная подписка «Expert» не дает доступа. Матераиалы курса остается и после завершения подписки (не нужно ее продлять все время, я не забираю доступ). Как только план курса будет сформирован и курс стартует, его цена будет выше, ориентировочно на 30%. +💳 Сейчас на курс можно записаться по плану «Expert» на 1 год за $204 (+ локальные налоги) на Patreon. Помесячная подписка «Expert» не дает доступа. Матераиалы курса остается и после завершения подписки (не нужно ее продлять все время, я не забираю доступ). Как только план курса будет сформирован и курс стартует, его цена будет выше, ориентировочно на 30%. 👉 Подписаться: https://www.patreon.com/tshemsedinov - Подписывайтесь на https://t.me/metarhia и https://www.youtube.com/@TimurShemsedinov чтобы следить за новостями. +🎉 После того, как Вы взяли курс, в течении суток я добавляю вам права на репозиторий в Github, добавляю в календарь на созвоны через google-meet, и придут ссылки на все нужные ресурсы в почту. Может попаст в спам, проверьте. + +👉 Подписывайтесь на https://t.me/metarhia и https://www.youtube.com/@TimurShemsedinov чтобы следить за новостями. From 75565b553e6a617ac5e60b171a1a225ef9b03c68 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 5 Dec 2023 09:00:21 +0200 Subject: [PATCH 111/217] Add topics to NodeJS 2024 --- Courses/NodeJS-2024.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Courses/NodeJS-2024.md b/Courses/NodeJS-2024.md index d4164fb..c14e41a 100644 --- a/Courses/NodeJS-2024.md +++ b/Courses/NodeJS-2024.md @@ -113,6 +113,10 @@ - ⭐ Реализация HTTP Proxy - 📢 [Разбор примеров кода Timur Sevimli](https://youtu.be/4yF6hlxiIic) - 💻 Примеры кода из видео: https://github.com/HowProgrammingWorks/ProxyHTTP +- ⭐ Сборка Node.js приложений в single executable +- ⭐ Автоматическая перезагрузка процессов с --watch +- ⭐ Обзор Web API портированнного в Node.js: Web Crypro, Web Streams, Intl +- ⭐ Встроенная система Permissions для ограничения доступа к файловой системе, сети, другим API План курса формируется. Тут появится еще много тем в ближайшее время. From 358c228d2146d8ac6812aa14bf3229837b72dbef Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 5 Dec 2023 09:38:53 +0200 Subject: [PATCH 112/217] Add tasks --- Courses/NodeJS-2024.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/Courses/NodeJS-2024.md b/Courses/NodeJS-2024.md index c14e41a..243307d 100644 --- a/Courses/NodeJS-2024.md +++ b/Courses/NodeJS-2024.md @@ -120,6 +120,36 @@ План курса формируется. Тут появится еще много тем в ближайшее время. +## Задания + +- 🧑‍💻 Блок заданий №1 + - Создание структуры проекта, системы модульности, фреймворк-агностик + - Организация служебных вещей: логирование, конфигурирование, запуск, + - Проектирование API, организация роутинга и транспорт-агностик подхода +- 🧑‍💻 Блок заданий №2 + - Проектирование предметной области, использование схем, ERD, IDEf1x + - Организация слоя доступа к базе данных, query builder, паттерн репозиторий + - Защита от SQL-injection, параметрические запросы +- 🧑‍💻 Блок заданий №3 + - Сетевые протоколы, сериализация, организация сессий + - Принципы взаимодействия: REST, RPC, трансляция событий + - Безопасность, CORS, потоковое вещание, partial-content, upload/download файлов +- 🧑‍💻 Блок заданий №4 + - Принемение `GRASP` и `SOLID` для Node.js приложений + - Использование паттернов и рефакторинг с применением паттернов +- 🧑‍💻 Блок заданий №5 + - Использование потоков Readable, Writable, Transform, работа с файмами + - Корректная обработка ошибок и исключений + - Рефакторинг ассинхронного кода и стыковка контрактов +- 🧑‍💻 Блок заданий №6 + - Организация клиентского кода, прозрачность вызово серверного API через async/await + - Межсервеное взаимодействие, прозрачность вызово через async/await (как и для клиентского кода) + - Интеграция подсистем по принципу единого адресного пространства +- 🧑‍💻 Блок заданий №7 + - Реализация системы прав (аккаунты, пароли, роли, пермишены, применение ACL, ABAC, RBAC) + - Система сессий: хранимое состояние, состояние соединений, состояние прикрепленное к вызову + - Безопасность (`DoS`, `XSS`, `Path traversal`, `CSRF`, и т.д.) + # Доступ 💳 Сейчас на курс можно записаться по плану «Expert» на 1 год за $204 (+ локальные налоги) на Patreon. Помесячная подписка «Expert» не дает доступа. Матераиалы курса остается и после завершения подписки (не нужно ее продлять все время, я не забираю доступ). Как только план курса будет сформирован и курс стартует, его цена будет выше, ориентировочно на 30%. From bb136ebfaa4cb213f11705fa4ba1ba580dda6b3a Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 5 Dec 2023 09:59:35 +0200 Subject: [PATCH 113/217] Fix spelling --- Courses/NodeJS-2024.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Courses/NodeJS-2024.md b/Courses/NodeJS-2024.md index 243307d..75ef504 100644 --- a/Courses/NodeJS-2024.md +++ b/Courses/NodeJS-2024.md @@ -135,15 +135,15 @@ - Принципы взаимодействия: REST, RPC, трансляция событий - Безопасность, CORS, потоковое вещание, partial-content, upload/download файлов - 🧑‍💻 Блок заданий №4 - - Принемение `GRASP` и `SOLID` для Node.js приложений + - Применение `GRASP` и `SOLID` для Node.js приложений - Использование паттернов и рефакторинг с применением паттернов - 🧑‍💻 Блок заданий №5 - - Использование потоков Readable, Writable, Transform, работа с файмами + - Использование потоков Readable, Writable, Transform, работа с файлами - Корректная обработка ошибок и исключений - - Рефакторинг ассинхронного кода и стыковка контрактов + - Рефакторинг асинхронного кода и стыковка контрактов - 🧑‍💻 Блок заданий №6 - - Организация клиентского кода, прозрачность вызово серверного API через async/await - - Межсервеное взаимодействие, прозрачность вызово через async/await (как и для клиентского кода) + - Организация клиентского кода, прозрачность вызовов серверного API через async/await + - Межсерверное взаимодействие, прозрачность вызовов через async/await (как и для клиентского кода) - Интеграция подсистем по принципу единого адресного пространства - 🧑‍💻 Блок заданий №7 - Реализация системы прав (аккаунты, пароли, роли, пермишены, применение ACL, ABAC, RBAC) From e635319ca5b32fdbddb47b7a61c507a6a70e2e31 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 9 Dec 2023 00:02:42 +0200 Subject: [PATCH 114/217] Add topics to Async 2024 --- Courses/Async-2024.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Courses/Async-2024.md b/Courses/Async-2024.md index 9cd60f8..7b09e60 100644 --- a/Courses/Async-2024.md +++ b/Courses/Async-2024.md @@ -16,16 +16,20 @@ Темы нового курса: -- Контракты асинхронности на базе callback: callback-last, error-first +- Контракты асинхронности на базе callback: Callback-last-error-first - Минимально необходимое понимание рантайма: event loop, I/O, таймеры - Контракты асинхронности на базе событий: EventEmitter, Streams -- Контракт Promise/then/catch/finally и синтаксис async/await +- Потоки событий, паттерн Observer/Observable и RX.js +- Контракты Promise/Thenable/then/catch/finally и синтаксис async/await - Параллельное и последовательное исполнение, all/any/race/allSettled - Конвертеры контрактов, стыковка кода в разных стилях - Предотвращение состояния гонки по данным и управлению в асинхронном коде - Отмена асинхронных операций: AbortController, AbortSignal - Обработка ошибок, их выявление и возможные проблемы со стектрейсом - Асинхронныек коллекции (собираем значения до готовности) +- Асинхронная очередь и асинхронный пул +- Асинхронные генератори и асинхронные итераторы +- Обзор других контрактов: generators, signals, future, deferred ## Обратите внимание From fa3ce4af60e7baec62cc282074efeb916eeb65b2 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 11 Dec 2023 03:23:42 +0200 Subject: [PATCH 115/217] Update Async-2024.md --- Courses/Async-2024.md | 50 ++++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/Courses/Async-2024.md b/Courses/Async-2024.md index 7b09e60..95b9fb7 100644 --- a/Courses/Async-2024.md +++ b/Courses/Async-2024.md @@ -1,5 +1,7 @@ # Асинхронное программирование 2024 +💡 Объем материала: 10 часов лекций + необязательные материалы, созвоны для ревью кода и ответов на вопросы: 2 часа в неделю в течении года, репозитории с примерами кода, задачи по всем темам. + Те способы писать асинхронный код, которые мы использовали 10-15 лет назад безвозвратно уходят в прошлое и могут быть интересны лишь для поддержки легаси упражнения в глубоком понимании асинхронного программирования. Даже способы 5-7 летней давности уже имеют мало общего с современными практиками, но интернет полон устаревшей информации, даже [открытый курс сообщества Metarhia](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md) на сегодняшний момент стал слишком громоздким и излишним. Еще нужно упомянуть о том, что в системном и прикладном коде асинхронное программирование должно выглядеть принципиально по-разному. Полностью скрыть от продуктового разработчика сложность асинхронного кода за абстракциями не удастся, потому, что он в любом случае будет работать с таймерами, событиями, стримами, fetch и другими асинхронными API, но его можно писать в десятки раз проще, чем асинхронный код с системном слое. Что касается системного слоя, то нужно вводить в обиход теорию очередей (системы массового обслуживания), модель акторов, часть абстракций из параллельного программирования (семафоры, рандеву, атомарные операции). Конечно, содержать все это в одном курсе сложновато, поэтому, мы отдадим приоритет прикладному коду и сначала полностью подготовим курс для применения асинхронного программирования в продуктовой разработке, а потом будем добавлять необязательные темы их старого курса и много других полезных абстракций, широко распространенных в других языках программирования, но слабо известных в мире JavaScript. ## Содержание @@ -16,33 +18,41 @@ Темы нового курса: -- Контракты асинхронности на базе callback: Callback-last-error-first -- Минимально необходимое понимание рантайма: event loop, I/O, таймеры -- Контракты асинхронности на базе событий: EventEmitter, Streams -- Потоки событий, паттерн Observer/Observable и RX.js -- Контракты Promise/Thenable/then/catch/finally и синтаксис async/await -- Параллельное и последовательное исполнение, all/any/race/allSettled -- Конвертеры контрактов, стыковка кода в разных стилях -- Предотвращение состояния гонки по данным и управлению в асинхронном коде -- Отмена асинхронных операций: AbortController, AbortSignal -- Обработка ошибок, их выявление и возможные проблемы со стектрейсом -- Асинхронныек коллекции (собираем значения до готовности) -- Асинхронная очередь и асинхронный пул -- Асинхронные генератори и асинхронные итераторы -- Обзор других контрактов: generators, signals, future, deferred +Условные обозначения: ⭐ новые лекции, ✨ открытые лекции, 🧩 необязательные темы + +- ⭐ Контракты асинхронности на базе callback: Callback-last-error-first +- ✨ Минимально необходимое понимание рантайма: event loop, I/O, таймеры +- ⭐ Контракты асинхронности на базе событий: EventEmitter, Streams +- ✨ Потоки событий, паттерн Observer/Observable и RX.js +- ⭐ Контракты Promise/Thenable/then/catch/finally и синтаксис async/await +- ⭐ Параллельное и последовательное исполнение, all/any/race/allSettled +- ⭐ Конвертеры контрактов, стыковка кода в разных стилях +- ⭐ Предотвращение состояния гонки по данным и управлению в асинхронном коде +- ⭐ Отмена асинхронных операций: AbortController, AbortSignal +- ⭐ Обработка ошибок, их выявление и возможные проблемы со стектрейсом +- 🧩 Асинхронныек коллекции (собираем значения до готовности) +- 🧩 Асинхронная очередь и асинхронный пул +- 🧩 Асинхронные генератори и асинхронные итераторы +- 🧩 Обзор других контрактов: generators, signals, future, deferred ## Обратите внимание Что нужно знать и уметь на входе: -- [Синтаксис JavaScript, но можно без всяких триков](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Fundamentals.md) -- Уверенно владеть git, иметь github аккаунт -- Желательно docker, иметь рабочую машину на linux или mac -- Любая среда разработки, IDE или редактор +- 🔗 [Синтаксис JavaScript без всяких триков](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Fundamentals.md) +- 💡 Уверенно владеть git, иметь github аккаунт +- 💡 Любая среда разработки, IDE или редактор Чем это курс не является: это не чтение документации, не курс по библиотекам и фреймворкам, не повторение старого курса, не лайвкодинг и не мастеркласс, не стрим. Новый курс - это максимально сконцентрированная информация и практические задачи как для прикладного, так и для системного программирования со сравнением этих подходов. ## Как попасть на курс -- Новости будут в канале: https://t.me/asyncify -- Группа курса: https://t.me/asynctalks +💳 Сейчас на курс можно записаться по плану «Professional» на 1 год за $102 (+ локальные налоги) на Patreon или аналог в гривнах. Помесячная подписка «Professional» не дает доступа. Матераиалы курса остается и после завершения подписки (не нужно ее продлять все время, я не забираю доступ). Как только план курса будет сформирован и курс стартует в начале 2024, его цена будет выше в 2 раза. + +👉 Подписаться: https://www.patreon.com/tshemsedinov + +🎉 После того, как Вы взяли курс, в течении суток я добавляю вам права на репозиторий в Github, добавляю в календарь на созвоны через google-meet, и придут ссылки на все нужные ресурсы в почту. Может попасть в спам, проверьте. + +👉 Новости курса будут в канале: https://t.me/asyncify +👉 Открытая группа курса: https://t.me/asynctalks +👉 Подписывайтесь на https://t.me/metarhia и https://www.youtube.com/@TimurShemsedinov чтобы следить за новостями From 62e66b5ac5cc1d3cbae2a8e934f8feea9c973513 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 16 Dec 2023 11:28:50 +0200 Subject: [PATCH 116/217] Update Async-2024.md --- Courses/Async-2024.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Courses/Async-2024.md b/Courses/Async-2024.md index 95b9fb7..c12b1be 100644 --- a/Courses/Async-2024.md +++ b/Courses/Async-2024.md @@ -47,9 +47,11 @@ ## Как попасть на курс -💳 Сейчас на курс можно записаться по плану «Professional» на 1 год за $102 (+ локальные налоги) на Patreon или аналог в гривнах. Помесячная подписка «Professional» не дает доступа. Матераиалы курса остается и после завершения подписки (не нужно ее продлять все время, я не забираю доступ). Как только план курса будет сформирован и курс стартует в начале 2024, его цена будет выше в 2 раза. +💳 Сейчас на курс можно записаться по плану «Professional» на 1 год за $102 (+ локальные налоги) на Patreon. Матераиалы курса остается и после завершения подписки (не нужно ее продлять все время, я не забираю доступ). +💳 Второй вариант: вместе с курсом по ноде по плану «Node + Async» $250 (+ локальные налоги) на Patreon. Программа курса «Node.js 2024»: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/NodeJS-2024.md и вопросы для собеседований, которые мы разберем для ноды: https://github.com/tshemsedinov/NodeJS-Interview-Questions +💡 Цены актуальны до 28 декабря 2023, потом оба плана станут дороже. Помесячная подписка не дает доступа. -👉 Подписаться: https://www.patreon.com/tshemsedinov +🎫 Регистрация: https://www.patreon.com/tshemsedinov 🎉 После того, как Вы взяли курс, в течении суток я добавляю вам права на репозиторий в Github, добавляю в календарь на созвоны через google-meet, и придут ссылки на все нужные ресурсы в почту. Может попасть в спам, проверьте. From d09ccc9e65c301056e883daf76e9d7718edab6eb Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 16 Dec 2023 11:29:13 +0200 Subject: [PATCH 117/217] Update Async-2024.md --- Courses/Async-2024.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Courses/Async-2024.md b/Courses/Async-2024.md index c12b1be..b6f26da 100644 --- a/Courses/Async-2024.md +++ b/Courses/Async-2024.md @@ -47,8 +47,8 @@ ## Как попасть на курс -💳 Сейчас на курс можно записаться по плану «Professional» на 1 год за $102 (+ локальные налоги) на Patreon. Матераиалы курса остается и после завершения подписки (не нужно ее продлять все время, я не забираю доступ). -💳 Второй вариант: вместе с курсом по ноде по плану «Node + Async» $250 (+ локальные налоги) на Patreon. Программа курса «Node.js 2024»: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/NodeJS-2024.md и вопросы для собеседований, которые мы разберем для ноды: https://github.com/tshemsedinov/NodeJS-Interview-Questions +💳 Сейчас на курс можно записаться по плану «Professional» на 1 год за $102 (+ локальные налоги) на Patreon. Матераиалы курса остается и после завершения подписки (не нужно ее продлять все время, я не забираю доступ). +💳 Второй вариант: вместе с курсом по ноде по плану «Node + Async» $250 (+ локальные налоги) на Patreon. Программа курса «Node.js 2024»: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/NodeJS-2024.md и вопросы для собеседований, которые мы разберем для ноды: https://github.com/tshemsedinov/NodeJS-Interview-Questions 💡 Цены актуальны до 28 декабря 2023, потом оба плана станут дороже. Помесячная подписка не дает доступа. 🎫 Регистрация: https://www.patreon.com/tshemsedinov From a01f24014969c25a93de15b5a38d2f3e40ae40e9 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 16 Dec 2023 11:31:51 +0200 Subject: [PATCH 118/217] Update NodeJS-2024.md --- Courses/NodeJS-2024.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Courses/NodeJS-2024.md b/Courses/NodeJS-2024.md index 75ef504..2bcd41f 100644 --- a/Courses/NodeJS-2024.md +++ b/Courses/NodeJS-2024.md @@ -152,9 +152,11 @@ # Доступ -💳 Сейчас на курс можно записаться по плану «Expert» на 1 год за $204 (+ локальные налоги) на Patreon. Помесячная подписка «Expert» не дает доступа. Матераиалы курса остается и после завершения подписки (не нужно ее продлять все время, я не забираю доступ). Как только план курса будет сформирован и курс стартует, его цена будет выше, ориентировочно на 30%. +💳 Сейчас на курс можно записаться по плану «Expert» на 1 год за $204 (+ локальные налоги) на Patreon. Помесячная подписка «Expert» не дает доступа. Матераиалы курса остается и после завершения подписки (не нужно ее продлять все время, я не забираю доступ). +💳 Второй вариант: вместе с курсом по ассинхронному программированию «Node + Async» $250 (+ локальные налоги) на Patreon. Программа курса «Async 2024»: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Async-2024.md +💡 Цены актуальны до 28 декабря 2023, потом оба плана станут дороже. Помесячная подписка не дает доступа. -👉 Подписаться: https://www.patreon.com/tshemsedinov +🎫 Регистрация: https://www.patreon.com/tshemsedinov 🎉 После того, как Вы взяли курс, в течении суток я добавляю вам права на репозиторий в Github, добавляю в календарь на созвоны через google-meet, и придут ссылки на все нужные ресурсы в почту. Может попаст в спам, проверьте. From dfc03de1144afa3740b2257b2e97bf0b806ade14 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 23 Dec 2023 01:19:46 -0500 Subject: [PATCH 119/217] Add nocode video --- Courses/Talks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/Talks.md b/Courses/Talks.md index f8a8447..84e0040 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -7,7 +7,7 @@ - [Стрим про образование программиста с Тимуром Шемсединовым и Сергеем Немчинским](https://www.youtube.com/live/pcwccVihgeg?feature=share) - [Введение в ИТ специальности / Крымскотатарский ИТ канал / 23 Sep 2023](https://youtu.be/kN12mb_3PRE) - [«No Code, No Conference» 2023-03-16](https://flowmates.org/) -- [Человек как преодоление пропасти между AI и программированием — NOCODE SUMMIT Almaty 2023-11-30](https://flowmates.org/no-code-summit-almaty/) +- [Человек как преодоление пропасти между AI и программированием — NOCODE SUMMIT Almaty 2023-11-30](https://youtu.be/xGZC23wRAV8) - [Применение ChatGPT в оптимизации JavaScript для NodeJS](https://youtu.be/Ebrzqj8cGUY) - [Прекращение поддержки Node.js 14.x и обновление до 16, 18, 20](https://youtu.be/HriGsw3IPmQ) - [Революция в ИТ: 2023-24, что учить, трансформация бизнеса, кого нанимать и новые профессии](https://youtu.be/hYbF3IlMovE) From dbf046fdae907e425840d030af72dc24a51742e2 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 23 Dec 2023 01:24:20 -0500 Subject: [PATCH 120/217] Update Talks.md --- Courses/Talks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/Talks.md b/Courses/Talks.md index 84e0040..fc25886 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -1,6 +1,6 @@ # Conference and public talks -## Future talks +## 2024 ## 2023 From bfa318c01bb769300185ddd2dd90645014a43442 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 25 Dec 2023 19:37:41 +0200 Subject: [PATCH 121/217] Remove old index --- Courses/index.js | 38 -------------------------------------- 1 file changed, 38 deletions(-) delete mode 100644 Courses/index.js diff --git a/Courses/index.js b/Courses/index.js deleted file mode 100644 index 1b7bf14..0000000 --- a/Courses/index.js +++ /dev/null @@ -1,38 +0,0 @@ -({ - intro: { - title: 'Introduction to software engineering', - }, - sef1: { - title: 'Software engineering fundamentals: part 1', - }, - sef2: { - title: 'Software engineering fundamentals: part 2', - }, - sef3: { - title: 'Software engineering fundamentals: part 3', - }, - pps1: { - title: 'Asynchronous programming', - }, - pps2: { - title: 'Parallel programming', - }, - pps3: { - title: 'Distributed systems', - }, - nts1: { - title: 'Node.js technology stack: part1', - }, - nts2: { - title: 'Node.js technology stack: part2', - }, - nts3: { - title: 'Node.js technology stack: part3', - }, - isa1: { - title: 'Information system architecture: part1', - }, - isa2: { - title: 'Information system architecture: part2', - }, -}); From 430f20fd80283f0c86dacea9f4d817e89d93ece1 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 30 Dec 2023 20:27:12 +0200 Subject: [PATCH 122/217] Update Async 2024 --- Courses/Async-2024.md | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/Courses/Async-2024.md b/Courses/Async-2024.md index b6f26da..4ed2ebc 100644 --- a/Courses/Async-2024.md +++ b/Courses/Async-2024.md @@ -20,20 +20,22 @@ Условные обозначения: ⭐ новые лекции, ✨ открытые лекции, 🧩 необязательные темы -- ⭐ Контракты асинхронности на базе callback: Callback-last-error-first +- ⭐ Контракты асинхронности на базе callback: `Callback-last-error-first` - ✨ Минимально необходимое понимание рантайма: event loop, I/O, таймеры -- ⭐ Контракты асинхронности на базе событий: EventEmitter, Streams -- ✨ Потоки событий, паттерн Observer/Observable и RX.js -- ⭐ Контракты Promise/Thenable/then/catch/finally и синтаксис async/await -- ⭐ Параллельное и последовательное исполнение, all/any/race/allSettled -- ⭐ Конвертеры контрактов, стыковка кода в разных стилях +- ⭐ Контракты асинхронности на базе событий: `EventEmitter`, `Stream` +- ✨ Потоки событий, паттерн `Observer/Observable`, реактивность на `RxJS`, `signals` +- ⭐ Контракты `Promise/Thenable/then/catch/finally` и синтаксис `async/await` +- ⭐ Параллельное и последовательное исполнение `all/any/race/allSettled` +- ⭐ Конвертеры контрактов `asyncify`, `callbackify`, стыковка кода в разных стилях - ⭐ Предотвращение состояния гонки по данным и управлению в асинхронном коде -- ⭐ Отмена асинхронных операций: AbortController, AbortSignal +- ⭐ Отмена асинхронных операций: `AbortController`, `AbortSignal` - ⭐ Обработка ошибок, их выявление и возможные проблемы со стектрейсом - 🧩 Асинхронныек коллекции (собираем значения до готовности) -- 🧩 Асинхронная очередь и асинхронный пул -- 🧩 Асинхронные генератори и асинхронные итераторы -- 🧩 Обзор других контрактов: generators, signals, future, deferred +- 🧩 Асинхронные абстракции: `Queue`, `Pool`, `Collector`, `Semaphore`, `Lock`, `Mutex` +- 🧩 Системные абстракции: `threads`, `processes`, `MessageChannel`, `BroadcastChannel` +- 🧩 Асинхронные генераторы и асинхронные итераторы +- 🧩 Обзор других абстракций: `future`, `do`, `coroutines`, `actor model`, `Chain of responsibility` +- 🧩 Обзор легаси контрактов и антипаттернов: `yield`, `middleware`, `deferred`, `Async.js` ## Обратите внимание @@ -47,9 +49,9 @@ ## Как попасть на курс -💳 Сейчас на курс можно записаться по плану «Professional» на 1 год за $102 (+ локальные налоги) на Patreon. Матераиалы курса остается и после завершения подписки (не нужно ее продлять все время, я не забираю доступ). -💳 Второй вариант: вместе с курсом по ноде по плану «Node + Async» $250 (+ локальные налоги) на Patreon. Программа курса «Node.js 2024»: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/NodeJS-2024.md и вопросы для собеседований, которые мы разберем для ноды: https://github.com/tshemsedinov/NodeJS-Interview-Questions -💡 Цены актуальны до 28 декабря 2023, потом оба плана станут дороже. Помесячная подписка не дает доступа. +💳 Сейчас на курс можно записаться «Async 2024» годовая подписка на Patreon. Матераиалы курса остается и после завершения подписки (не нужно ее продлять все время, я не забираю доступ). +💳 Второй вариант: вместе с курсом по ноде по плану «Node + Async» годовая подписка на Patreon. Программа курса «Node.js 2024»: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/NodeJS-2024.md и вопросы для собеседований, которые мы разберем для ноды: https://github.com/tshemsedinov/NodeJS-Interview-Questions +💡 Помесячная подписка не дает доступа. 🎫 Регистрация: https://www.patreon.com/tshemsedinov From 4dfd2fd79847c101d9301774ab0e2bd2bfe3e45f Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 30 Dec 2023 20:31:29 +0200 Subject: [PATCH 123/217] Update Node.js 2024 --- Courses/NodeJS-2024.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Courses/NodeJS-2024.md b/Courses/NodeJS-2024.md index 2bcd41f..d5fba40 100644 --- a/Courses/NodeJS-2024.md +++ b/Courses/NodeJS-2024.md @@ -152,9 +152,9 @@ # Доступ -💳 Сейчас на курс можно записаться по плану «Expert» на 1 год за $204 (+ локальные налоги) на Patreon. Помесячная подписка «Expert» не дает доступа. Матераиалы курса остается и после завершения подписки (не нужно ее продлять все время, я не забираю доступ). -💳 Второй вариант: вместе с курсом по ассинхронному программированию «Node + Async» $250 (+ локальные налоги) на Patreon. Программа курса «Async 2024»: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Async-2024.md -💡 Цены актуальны до 28 декабря 2023, потом оба плана станут дороже. Помесячная подписка не дает доступа. +💳 Сейчас на курс можно записаться по плану «NodeJS 2024» годовая подписка на Patreon. Матераиалы курса остаются и после завершения подписки (не нужно ее продлять все время, я не забираю доступ). +💳 Второй вариант: вместе с курсом по ассинхронному программированию «Node + Async» годовая подписка на Patreon. Программа курса «Async 2024»: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Async-2024.md +💡 Помесячная подписка не дает доступа. 🎫 Регистрация: https://www.patreon.com/tshemsedinov From 19079b66498f281eeb6d092861afa899771b5998 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 8 Jan 2024 05:12:37 -0500 Subject: [PATCH 124/217] Update Async-2024.md --- Courses/Async-2024.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Courses/Async-2024.md b/Courses/Async-2024.md index 4ed2ebc..63ba78d 100644 --- a/Courses/Async-2024.md +++ b/Courses/Async-2024.md @@ -49,9 +49,8 @@ ## Как попасть на курс -💳 Сейчас на курс можно записаться «Async 2024» годовая подписка на Patreon. Матераиалы курса остается и после завершения подписки (не нужно ее продлять все время, я не забираю доступ). -💳 Второй вариант: вместе с курсом по ноде по плану «Node + Async» годовая подписка на Patreon. Программа курса «Node.js 2024»: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/NodeJS-2024.md и вопросы для собеседований, которые мы разберем для ноды: https://github.com/tshemsedinov/NodeJS-Interview-Questions -💡 Помесячная подписка не дает доступа. +💳 Сейчас на курс можно записаться «Async 2024» годовая подписка на Patreon - это полный курс, а помесячная - без ревью кода, ответов на вопросы и созвонов. Матераиалы курса остаются и после завершения подписки (не нужно ее продлять все время, я не забираю доступ). +💳 Второй вариант: вместе с курсом по ноде по плану «Node + Async». Программа курса «Node.js 2024»: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/NodeJS-2024.md и вопросы для собеседований, которые мы разберем для ноды: https://github.com/tshemsedinov/NodeJS-Interview-Questions 🎫 Регистрация: https://www.patreon.com/tshemsedinov From 5bd1f8be391dcf6974650093519acf40ab895b6e Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 8 Jan 2024 05:13:44 -0500 Subject: [PATCH 125/217] Update NodeJS-2024.md --- Courses/NodeJS-2024.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Courses/NodeJS-2024.md b/Courses/NodeJS-2024.md index d5fba40..34e2052 100644 --- a/Courses/NodeJS-2024.md +++ b/Courses/NodeJS-2024.md @@ -152,9 +152,8 @@ # Доступ -💳 Сейчас на курс можно записаться по плану «NodeJS 2024» годовая подписка на Patreon. Матераиалы курса остаются и после завершения подписки (не нужно ее продлять все время, я не забираю доступ). +💳 Сейчас на курс можно записаться по плану «NodeJS 2024» годовая подписка на Patreon - полный курс, помесячная - отдельные лекции и материалы, но без ревью кода, заданий, созвонов и ответов на вопросы. Матераиалы курса остаются и после завершения подписки (не нужно ее продлять все время, я не забираю доступ). 💳 Второй вариант: вместе с курсом по ассинхронному программированию «Node + Async» годовая подписка на Patreon. Программа курса «Async 2024»: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Async-2024.md -💡 Помесячная подписка не дает доступа. 🎫 Регистрация: https://www.patreon.com/tshemsedinov From 57e8858ab2b18b2db98784bb65bd237a063e262e Mon Sep 17 00:00:00 2001 From: Vitaliy Artyukh Date: Mon, 26 Feb 2024 14:36:18 +0200 Subject: [PATCH 126/217] Fix spelling (#111) --- Courses/Async-2024.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Courses/Async-2024.md b/Courses/Async-2024.md index 63ba78d..6b4fe31 100644 --- a/Courses/Async-2024.md +++ b/Courses/Async-2024.md @@ -2,7 +2,7 @@ 💡 Объем материала: 10 часов лекций + необязательные материалы, созвоны для ревью кода и ответов на вопросы: 2 часа в неделю в течении года, репозитории с примерами кода, задачи по всем темам. -Те способы писать асинхронный код, которые мы использовали 10-15 лет назад безвозвратно уходят в прошлое и могут быть интересны лишь для поддержки легаси упражнения в глубоком понимании асинхронного программирования. Даже способы 5-7 летней давности уже имеют мало общего с современными практиками, но интернет полон устаревшей информации, даже [открытый курс сообщества Metarhia](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md) на сегодняшний момент стал слишком громоздким и излишним. Еще нужно упомянуть о том, что в системном и прикладном коде асинхронное программирование должно выглядеть принципиально по-разному. Полностью скрыть от продуктового разработчика сложность асинхронного кода за абстракциями не удастся, потому, что он в любом случае будет работать с таймерами, событиями, стримами, fetch и другими асинхронными API, но его можно писать в десятки раз проще, чем асинхронный код с системном слое. Что касается системного слоя, то нужно вводить в обиход теорию очередей (системы массового обслуживания), модель акторов, часть абстракций из параллельного программирования (семафоры, рандеву, атомарные операции). Конечно, содержать все это в одном курсе сложновато, поэтому, мы отдадим приоритет прикладному коду и сначала полностью подготовим курс для применения асинхронного программирования в продуктовой разработке, а потом будем добавлять необязательные темы их старого курса и много других полезных абстракций, широко распространенных в других языках программирования, но слабо известных в мире JavaScript. +Те способы писать асинхронный код, которые мы использовали 10-15 лет назад безвозвратно уходят в прошлое и могут быть интересны лишь для поддержки легаси упражнения в глубоком понимании асинхронного программирования. Даже способы 5-7 летней давности уже имеют мало общего с современными практиками, но интернет полон устаревшей информации, даже [открытый курс сообщества Metarhia](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md) на сегодняшний момент стал слишком громоздким и излишним. Еще нужно упомянуть о том, что в системном и прикладном коде асинхронное программирование должно выглядеть принципиально по-разному. Полностью скрыть от продуктового разработчика сложность асинхронного кода за абстракциями не удастся, потому, что он в любом случае будет работать с таймерами, событиями, стримами, fetch и другими асинхронными API, но его можно писать в десятки раз проще, чем асинхронный код в системном слое. Что касается системного слоя, то нужно вводить в обиход теорию очередей (системы массового обслуживания), модель акторов, часть абстракций из параллельного программирования (семафоры, рандеву, атомарные операции). Конечно, содержать все это в одном курсе сложновато, поэтому, мы отдадим приоритет прикладному коду и сначала полностью подготовим курс для применения асинхронного программирования в продуктовой разработке, а потом будем добавлять необязательные темы из старого курса и много других полезных абстракций, широко распространенных в других языках программирования, но слабо известных в мире JavaScript. ## Содержание @@ -30,7 +30,7 @@ - ⭐ Предотвращение состояния гонки по данным и управлению в асинхронном коде - ⭐ Отмена асинхронных операций: `AbortController`, `AbortSignal` - ⭐ Обработка ошибок, их выявление и возможные проблемы со стектрейсом -- 🧩 Асинхронныек коллекции (собираем значения до готовности) +- 🧩 Асинхронные коллекции (собираем значения до готовности) - 🧩 Асинхронные абстракции: `Queue`, `Pool`, `Collector`, `Semaphore`, `Lock`, `Mutex` - 🧩 Системные абстракции: `threads`, `processes`, `MessageChannel`, `BroadcastChannel` - 🧩 Асинхронные генераторы и асинхронные итераторы From 9b88b1781b4b02cb0c7a95747ae69a9f2891575f Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 3 Mar 2024 09:27:25 -0500 Subject: [PATCH 127/217] Update Async-2024.md --- Courses/Async-2024.md | 138 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 120 insertions(+), 18 deletions(-) diff --git a/Courses/Async-2024.md b/Courses/Async-2024.md index 6b4fe31..6dd0a72 100644 --- a/Courses/Async-2024.md +++ b/Courses/Async-2024.md @@ -18,24 +18,126 @@ Темы нового курса: -Условные обозначения: ⭐ новые лекции, ✨ открытые лекции, 🧩 необязательные темы - -- ⭐ Контракты асинхронности на базе callback: `Callback-last-error-first` -- ✨ Минимально необходимое понимание рантайма: event loop, I/O, таймеры -- ⭐ Контракты асинхронности на базе событий: `EventEmitter`, `Stream` -- ✨ Потоки событий, паттерн `Observer/Observable`, реактивность на `RxJS`, `signals` -- ⭐ Контракты `Promise/Thenable/then/catch/finally` и синтаксис `async/await` -- ⭐ Параллельное и последовательное исполнение `all/any/race/allSettled` -- ⭐ Конвертеры контрактов `asyncify`, `callbackify`, стыковка кода в разных стилях -- ⭐ Предотвращение состояния гонки по данным и управлению в асинхронном коде -- ⭐ Отмена асинхронных операций: `AbortController`, `AbortSignal` -- ⭐ Обработка ошибок, их выявление и возможные проблемы со стектрейсом -- 🧩 Асинхронные коллекции (собираем значения до готовности) -- 🧩 Асинхронные абстракции: `Queue`, `Pool`, `Collector`, `Semaphore`, `Lock`, `Mutex` -- 🧩 Системные абстракции: `threads`, `processes`, `MessageChannel`, `BroadcastChannel` -- 🧩 Асинхронные генераторы и асинхронные итераторы -- 🧩 Обзор других абстракций: `future`, `do`, `coroutines`, `actor model`, `Chain of responsibility` -- 🧩 Обзор легаси контрактов и антипаттернов: `yield`, `middleware`, `deferred`, `Async.js` +Условные обозначения: ⭐ новые лекции, ✨ открытые старые лекции, 💯 обязательные, 🧑‍🎓 продвинутые, ⚙️ системные, 🧑‍🚀 по выбору, ⚠️ устаревшее, 🧩 необязательные темы, 💻 примеры кода, 🧑‍💻 задания + +- 💯 Контракты асинхронности на базе 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://www.youtube.com/live/ND5HNHicACI) + - 💻 Таймеры: https://github.com/HowProgrammingWorks/Timers + - 🧑‍💻 Задания по таймерам (в платном курсе) +- 💯 Контракты на базе событий `EventTarget`, `EventEmitter` + - ⭐ События (ссылка в платном курсе) + - 🧑‍💻 Задания по событиям (в платном курсе) + - ✨ [EventEmitter из старой лекции](https://youtu.be/LK2jveAnRNg) + - 💻 EventEmitter: https://github.com/HowProgrammingWorks/EventEmitter +- 💯 Абстракция потоков `Stream` + - ⭐ Стримы Readable, Writable, Transform, открытый конструктор, буферизация, backpressure (ссылка в платном курсе) + - 🧑‍💻 Задания по стримам (в платном курсе) + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Streams/tree/master/JavaScript + - ✨ [Паттерн открытый конструктор (Revealing Constructor)](https://youtu.be/leR5sXRkuJI) + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/RevealingConstructor +- ⚙️ Контракт `Thenable` + - ⭐ Контракт `Thenabe` (ссылка в платном курсе) + - ✨ [Thenable из старой лекции](https://youtu.be/Jdf_tZuJbHI) + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Thenable + - 🧑‍💻 Задания по `Thenabe` (в платном курсе) +- 💯 Контракт `Promise` + - ⭐ Promise: then/catch/finally и методы класса all, allSettled, race, any (ссылка в платном курсе) + - ✨ [Асинхронность на промисах из старой лекции](https://youtu.be/RMl4r6s1Y8M) + - 💻 [Примеры кода](https://github.com/HowProgrammingWorks/Promise/tree/master/JavaScript) + - 🧑‍💻 Задания по `Promise` (в платном курсе) +- 💯 Контракт асинхронных функций `async/await` + - ⭐ Асинхронные функции (ссылка в платном курсе) + - ✨ [Асинхронные функции из старой лекции](https://youtu.be/Jdf_tZuJbHI) + - 💻 [Примеры кода](https://github.com/HowProgrammingWorks/AsyncFunction/tree/main/JavaScript) + - 🧑‍💻 Задания по `async/await` (в платном курсе) +- 💯 Контракт сигналов `signals` + - ⭐ Сигналы (в платном курсе) + - 💻 Примеры кода: (готовятся), будут тут https://github.com/HowProgrammingWorks/Signals + - 🧑‍💻 Задания по сигналам (в платном курсе) +- 💯 Обработка ошибок, их выявление и решение проблем со стектрейсом + - ✨ [Обработка ошибок из старой лекции](https://youtu.be/Jdf_tZuJbHI) + - 💻 Примеры кода + - 💻 Примеры кода из старого курса: 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://youtu.be/Jj5KZRq4wYI) + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Pool + - 💻 Примеры кода: (готовятся), будут тут https://github.com/HowProgrammingWorks/AsyncPool +- 🧑‍🎓 Асинхронная коллекция `Collector` + - 🧩 Асинхронные коллекции (собираем значения до готовности) + - ✨ [Асинхронные коллекторы данных](https://youtu.be/tgodt1JL6II) + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Collector +- 🧑‍🎓 Паттерн цепочка ответственности `Chain of responsibility` + - 💻 Примеры кода: (готовятся), будут тут https://github.com/HowProgrammingWorks/ChainOfResponsibility +- 🧑‍🎓 Конвертеры контрактов `asyncify`, `callbackify`, стыковка кода в разных стилях + - ⭐ Асинхронные адаптеры (в платном курсе) + - ✨ [Асинхронные адаптеры из старой лекции](https://youtu.be/76k6_YkYRmU) + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/AsyncAdapter + - 🧑‍💻 Задания по адаптерам (в платном курсе) +- 🧑‍🎓 Предотвращение состояния гонки по данным и управлению в асинхронном коде (в платном курсе) +- 🧑‍🎓 Отмена асинхронных операций: `AbortController`, `AbortSignal` (в платном курсе) + - 🧩 Документация на MDN: https://developer.mozilla.org/en-US/docs/Web/API/AbortController +- 🧑‍🎓 `Async Generator` и `Async Iterator` (в платном курсе) + - ✨ [Генераторы и асинхронные генераторы из старой лекции](https://youtu.be/kvNm9D32s8s) +- ⚙️ Абстракции портированные из параллельного программирования в асинхронное + - 🧩 Асинхронные абстракции: `Semaphore`, `Mutex` + - 🧩 Блокировки `Lock`, `Spin Lock` +- ⚙️ Абстракции параллельного программирования + - 🧩 Системные абстракции: `threads`, `processes` + - 🧩 Межпроцессовое и межпотоковое взаимодействие, `MessageChannel`, `BroadcastChannel` + - 🧩 Корутины `coroutines` +- 🧑‍🎓 Асинхронные генераторы и асинхронные итераторы + - ✨ [Генераторы и асинхронные генераторы из старой лекции](https://youtu.be/kvNm9D32s8s) + - 💻 Генераторы: https://github.com/HowProgrammingWorks/Generator + - 💻 Асинхронные генераторы: https://github.com/HowProgrammingWorks/AsyncGenerator + - ✨ [Итераторы и асинхронные итераторы из старой лекции](https://youtu.be/rBGFlWpVpGs) + - 💻 Итераторы: https://github.com/HowProgrammingWorks/Iterator + - 💻 Асинхронные итераторы: https://github.com/HowProgrammingWorks/AsyncIterator +- 🧑‍🚀 Композиция функций на колбеках `compose callbacks` + - ✨ [Асинхронная композиция функций](https://youtu.be/3ZCrMlMpOrM) + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/AsyncCompose +- 🧑‍🚀 Композиция асинхронных функций `async compose` + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/AsyncCompose +- 🧑‍🚀 Асинхронность на потоках событий `RxJS` + - ✨ Потоки событий, паттерн `Observer/Observable` + - ✨ [Асинхронность на RxJS из старой лекции](https://youtu.be/0kcpMAl-wfE) + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Rx +- 🧑‍🚀 Модель акторов `actor model` + - ✨ [Модель акторов](https://youtu.be/xp5MVKEqxY4) + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/ActorModel +- 🧑‍🚀 Библиотека `do`: https://www.npmjs.com/package/do +- 🧑‍🚀 Функциональное асинхронное программирование, контракт `Future` + - ✨ [Асинхронность на фьючерах без состояния](https://youtu.be/22ONv3AGXdk) + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Future +- ⚠️ Асинхронность на синхронных генераторах `function*/yield` +- ⚠️ Мидлвары `middleware` как антипаттерн: https://youtu.be/RS8x73z4csI + - 💻 Примеры кода: (готовятся), будут тут https://github.com/HowProgrammingWorks/Middleware +- ⚠️ Контракты семейства `Deferred` + - ✨ [Deferred: Асинхронность на диферах с состоянием](https://youtu.be/a2fVA1o-ovM) + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Deferred +- ⚠️ Async.js + - 🧩 [Легаси код на библиотеке `Async.js`](https://youtu.be/XQ94wQc-erU) + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/AsynchronousProgramming +- ⚠️ Коллекция асинхронных абстракций `Metasync`: https://www.npmjs.com/package/metasync + - ✨ [Архивная лекция](https://youtu.be/xNfOv9I1MDk) +- ⚙️ Трекинг асинхронных контекстов + - ⭐ AsyncLocalStorage, AsyncResource (в платном курсе) + - 💻 Примеры использования AsyncLocalStorage и AsyncResource: https://github.com/HowProgrammingWorks/AsyncContextTracking +- ⚙️ Процессы и потоки + - 🧩 [Многопоточность в Node.js](https://youtu.be/VNXga8zomrY) + - 🧩 [Web Locks API in Node.js and browser](https://youtu.be/auMM-uV12F0) ## Обратите внимание From 1619fdb4ecf46aa6723a34a92fbc565bff3cd161 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 3 Mar 2024 09:35:25 -0500 Subject: [PATCH 128/217] Update Async-2024.md --- Courses/Async-2024.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/Courses/Async-2024.md b/Courses/Async-2024.md index 6dd0a72..f5de7bf 100644 --- a/Courses/Async-2024.md +++ b/Courses/Async-2024.md @@ -4,6 +4,8 @@ Те способы писать асинхронный код, которые мы использовали 10-15 лет назад безвозвратно уходят в прошлое и могут быть интересны лишь для поддержки легаси упражнения в глубоком понимании асинхронного программирования. Даже способы 5-7 летней давности уже имеют мало общего с современными практиками, но интернет полон устаревшей информации, даже [открытый курс сообщества Metarhia](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md) на сегодняшний момент стал слишком громоздким и излишним. Еще нужно упомянуть о том, что в системном и прикладном коде асинхронное программирование должно выглядеть принципиально по-разному. Полностью скрыть от продуктового разработчика сложность асинхронного кода за абстракциями не удастся, потому, что он в любом случае будет работать с таймерами, событиями, стримами, fetch и другими асинхронными API, но его можно писать в десятки раз проще, чем асинхронный код в системном слое. Что касается системного слоя, то нужно вводить в обиход теорию очередей (системы массового обслуживания), модель акторов, часть абстракций из параллельного программирования (семафоры, рандеву, атомарные операции). Конечно, содержать все это в одном курсе сложновато, поэтому, мы отдадим приоритет прикладному коду и сначала полностью подготовим курс для применения асинхронного программирования в продуктовой разработке, а потом будем добавлять необязательные темы из старого курса и много других полезных абстракций, широко распространенных в других языках программирования, но слабо известных в мире JavaScript. +![PXL_20231227_190319918 MP](https://github.com/metatech-university/Async-2024/assets/4405297/2d0855a7-18d5-45c2-8fa9-d1e873ba1030) + ## Содержание Важные аспекты нового курса: @@ -16,7 +18,18 @@ - Упор на надежность, поддерживаемость, тестируемость, снижение зацепления - Примеры и задачи по исправлению скрытых проблемных состояний и 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` | | Условные обозначения: ⭐ новые лекции, ✨ открытые старые лекции, 💯 обязательные, 🧑‍🎓 продвинутые, ⚙️ системные, 🧑‍🚀 по выбору, ⚠️ устаревшее, 🧩 необязательные темы, 💻 примеры кода, 🧑‍💻 задания From 67721c87152b9fdb5950765af1557ec1ab825440 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 3 Mar 2024 09:37:17 -0500 Subject: [PATCH 129/217] Fix link --- Courses/Async-2024.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/Async-2024.md b/Courses/Async-2024.md index f5de7bf..37546fc 100644 --- a/Courses/Async-2024.md +++ b/Courses/Async-2024.md @@ -81,7 +81,7 @@ - 🧑‍💻 Задания по обработке ошибок - 🧑‍🎓 Асинхронная очередь `AsyncQueue` - ⭐ Асинхронная очередь (в платном курсе) - - ✨ Конкурентная асинхронная очередь из старой лекции](https://youtu.be/Lg46AH8wFvg + - ✨ Конкурентная асинхронная очередь из старой лекции](https://youtu.be/Lg46AH8wFvg) - 💻 Примеры кода: https://github.com/HowProgrammingWorks/ConcurrentQueue - 💻 Примеры кода: (готовятся), будут тут https://github.com/HowProgrammingWorks/AsyncQueue - 🧑‍🎓 Асинхронный пул `AsyncPool` From 4cf88db9b78a86c19404c64b04b65faf3fd06f96 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 14 Mar 2024 19:56:12 -0400 Subject: [PATCH 130/217] Add tasks --- Courses/Async-2024.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Courses/Async-2024.md b/Courses/Async-2024.md index 37546fc..7646599 100644 --- a/Courses/Async-2024.md +++ b/Courses/Async-2024.md @@ -37,7 +37,7 @@ - ⭐ Контракты `Callback` и `Callback-last-error-first` (ссылка в платном курсе) - 💻 Колбеки: https://github.com/HowProgrammingWorks/Callbacks - 💻 Примеры кода с колбеками: https://github.com/HowProgrammingWorks/AsynchronousProgramming - - 🧑‍💻 Задания по колбекам (в платном курсе) + - 🧑‍💻 [Задания по колбекам](https://github.com/HowProgrammingWorks/Callbacks/tree/master/JavaScript/Tasks) (решения, ревью и разбор в платном курсе) - 💯 Минимально необходимое понимание рантайма: event loop, I/O, таймеры - ⭐ Фазы Event-loop в V8 и Node.js (ссылка в платном курсе) - 🧩 [Стрим с разбрром Event loop и асинхронности](https://www.youtube.com/live/ND5HNHicACI) @@ -45,7 +45,7 @@ - 🧑‍💻 Задания по таймерам (в платном курсе) - 💯 Контракты на базе событий `EventTarget`, `EventEmitter` - ⭐ События (ссылка в платном курсе) - - 🧑‍💻 Задания по событиям (в платном курсе) + - 🧑‍💻 [Задания по событиям](https://github.com/HowProgrammingWorks/Events/tree/main/JavaScript/Tasks) (решения, ревью и разбор в платном курсе) - ✨ [EventEmitter из старой лекции](https://youtu.be/LK2jveAnRNg) - 💻 EventEmitter: https://github.com/HowProgrammingWorks/EventEmitter - 💯 Абстракция потоков `Stream` @@ -58,17 +58,17 @@ - ⭐ Контракт `Thenabe` (ссылка в платном курсе) - ✨ [Thenable из старой лекции](https://youtu.be/Jdf_tZuJbHI) - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Thenable - - 🧑‍💻 Задания по `Thenabe` (в платном курсе) + - 🧑‍💻 [Задания по `Thenabe`Thenable](https://github.com/HowProgrammingWorks/Thenable/tree/master/JavaScript/Tasks) (решения, ревью и разбор в платном курсе) - 💯 Контракт `Promise` - ⭐ Promise: then/catch/finally и методы класса all, allSettled, race, any (ссылка в платном курсе) - ✨ [Асинхронность на промисах из старой лекции](https://youtu.be/RMl4r6s1Y8M) - 💻 [Примеры кода](https://github.com/HowProgrammingWorks/Promise/tree/master/JavaScript) - - 🧑‍💻 Задания по `Promise` (в платном курсе) + - 🧑‍💻 [Задания по `Promise`](https://github.com/HowProgrammingWorks/Promise/tree/master/JavaScript/Tasks) (решения, ревью и разбор в платном курсе) - 💯 Контракт асинхронных функций `async/await` - ⭐ Асинхронные функции (ссылка в платном курсе) - ✨ [Асинхронные функции из старой лекции](https://youtu.be/Jdf_tZuJbHI) - 💻 [Примеры кода](https://github.com/HowProgrammingWorks/AsyncFunction/tree/main/JavaScript) - - 🧑‍💻 Задания по `async/await` (в платном курсе) + - 🧑‍💻 [Задания по `async/await`](https://github.com/HowProgrammingWorks/AsyncAwait/tree/master/JavaScript/Tasks) (решения, ревью и разбор в платном курсе) - 💯 Контракт сигналов `signals` - ⭐ Сигналы (в платном курсе) - 💻 Примеры кода: (готовятся), будут тут https://github.com/HowProgrammingWorks/Signals From add71b467081575646e91620cbff3592345334fd Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 31 Mar 2024 23:18:01 +0300 Subject: [PATCH 131/217] Add talks --- Courses/Talks.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index fc25886..22a3fbd 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -2,6 +2,9 @@ ## 2024 +- [Все ли плохо с Diia](https://youtu.be/6X6MaXoQdw8) +- [👏 Дія відкрила код - Diia code review 🤦](https://youtu.be/ggIk83GO25I) + ## 2023 - [Стрим про образование программиста с Тимуром Шемсединовым и Сергеем Немчинским](https://www.youtube.com/live/pcwccVihgeg?feature=share) From b0fa624c5cef0cf23d8e82165e5feb54fdbe1d0e Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 1 Apr 2024 17:00:06 -0400 Subject: [PATCH 132/217] Add link --- Courses/Talks.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index 22a3fbd..dc6b646 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -4,6 +4,7 @@ - [Все ли плохо с Diia](https://youtu.be/6X6MaXoQdw8) - [👏 Дія відкрила код - Diia code review 🤦](https://youtu.be/ggIk83GO25I) +- [Дія» открыла код! Что не так?](https://www.youtube.com/watch?v=Ug-tytIlhU0) ## 2023 From d1df3d67c9a4ca6b544c216ff46635740601e44a Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Fri, 19 Apr 2024 03:18:23 -0400 Subject: [PATCH 133/217] Remove monthly plan --- Courses/Async-2024.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/Async-2024.md b/Courses/Async-2024.md index 7646599..88ee181 100644 --- a/Courses/Async-2024.md +++ b/Courses/Async-2024.md @@ -164,7 +164,7 @@ ## Как попасть на курс -💳 Сейчас на курс можно записаться «Async 2024» годовая подписка на Patreon - это полный курс, а помесячная - без ревью кода, ответов на вопросы и созвонов. Матераиалы курса остаются и после завершения подписки (не нужно ее продлять все время, я не забираю доступ). +💳 Сейчас на курс можно записаться по годовой подписке на план «Async 2024» на Patreon - это полный курс. Матераиалы курса остаются и после завершения подписки (не нужно ее продлять все время, я не забираю доступ). 💳 Второй вариант: вместе с курсом по ноде по плану «Node + Async». Программа курса «Node.js 2024»: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/NodeJS-2024.md и вопросы для собеседований, которые мы разберем для ноды: https://github.com/tshemsedinov/NodeJS-Interview-Questions 🎫 Регистрация: https://www.patreon.com/tshemsedinov From bf67883ed4e690ae86df2e909376f7348fc1ec44 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Fri, 19 Apr 2024 03:19:13 -0400 Subject: [PATCH 134/217] Remove nodejs monthly plan --- Courses/NodeJS-2024.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/NodeJS-2024.md b/Courses/NodeJS-2024.md index 34e2052..56f0b31 100644 --- a/Courses/NodeJS-2024.md +++ b/Courses/NodeJS-2024.md @@ -152,7 +152,7 @@ # Доступ -💳 Сейчас на курс можно записаться по плану «NodeJS 2024» годовая подписка на Patreon - полный курс, помесячная - отдельные лекции и материалы, но без ревью кода, заданий, созвонов и ответов на вопросы. Матераиалы курса остаются и после завершения подписки (не нужно ее продлять все время, я не забираю доступ). +💳 Сейчас на курс можно записаться по плану «NodeJS 2024» годовая подписка на Patreon - полный курс. Матераиалы курса остаются и после завершения подписки (не нужно ее продлять все время, я не забираю доступ). 💳 Второй вариант: вместе с курсом по ассинхронному программированию «Node + Async» годовая подписка на Patreon. Программа курса «Async 2024»: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Async-2024.md 🎫 Регистрация: https://www.patreon.com/tshemsedinov From df44d4179934525384fef013da34935016afcba3 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Fri, 30 Aug 2024 16:13:51 -0400 Subject: [PATCH 135/217] Fundamentals 2024 --- Courses/Fundamentals-2024.md | 140 +++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 Courses/Fundamentals-2024.md diff --git a/Courses/Fundamentals-2024.md b/Courses/Fundamentals-2024.md new file mode 100644 index 0000000..a0b12f8 --- /dev/null +++ b/Courses/Fundamentals-2024.md @@ -0,0 +1,140 @@ +# Основи програмування + +- Автор: https://github.com/tshemsedinov +- Завдання з курсу: готується для публікації +- Словник термінів: готується для публікації +- Умовні позначення: + - ⭐ - Нові спрощені лекції + - ✨ - Старі але важливі лекції + - 🧑‍💻 - Приклади коду + - 🧩 - Необов'язкові лекції + +## Перший семестр + +- Введення та огляд метеріалу + - ⭐ Новий вступ курсу 2024 (готується) + - ⭐ [Вступ курсу 2023](https://youtu.be/1lU7G46S4FA) + - ⭐ [Базовий JavaScript українською (8 годин)](https://youtu.be/FlXsGI7rzWE) + - ⭐ [Скорочений переклад базового JavaScrtipt руською (4 години)](https://youtu.be/HetL0ETbN6Y) + - ⭐ [Q&A для усіх курсів](https://youtu.be/Wm7wclbv1Ik) + - 🧩 [Введення у програмування](https://youtu.be/5Gt61EX6HZ4) + - 🧩 [Введення у програмування, продовження](https://youtu.be/PzlLXQ3RaDs) + - 🧩 [Мови програмування](https://youtu.be/enHA1CRkJe0) + - 🧩 Семінар: [JavaScript, відповіді на запитання](https://youtu.be/wqkQ6eslyzY) + - 🧩 [История развития языков программирования](https://youtu.be/qqz0VSaNxuw) + - 🧩 [Парадигмы программирования](https://youtu.be/Yk1sxLVHfjs) + - ✨ [Базовий синтаксис JavaScript](https://youtu.be/xJn3k1f4BiM) + - ✨ [Базовий синтаксис JavaScript, продовження](https://youtu.be/qa-XleqA0JU) + - 🧩 Семінар: [Базовий синтаксис мови JavaScript](https://youtu.be/PGqjTXQe_qw) + - 🧑‍💻 Абстракції та їх перевикористання: https://github.com/HowProgrammingWorks/Reusable + - 🧑‍💻 Основні конструкції: https://github.com/HowProgrammingWorks/Cheatsheet +- Ідентифікатори та значення + - ⭐ [Ідентифікатори, змінні та константи](https://youtu.be/Ljj8HyUIPUA) + - ⭐ [Літарали, значення та типи даних](https://youtu.be/yf58Lmr_J90) + - 🧑‍💻 Типи даних: https://github.com/HowProgrammingWorks/DataTypes +- Функції + - ⭐ [Функції, блоки та область видимості змінних](https://youtu.be/h5IvZh5QHEM) + - ✨ [Функції, стрілочні функції, контексти, замикання JavaScript](https://youtu.be/pn5myCmpV2U) + - 🧑‍💻 Функції: https://github.com/HowProgrammingWorks/Function +- Умови + - ⭐ [Умови та розгалудження, оператор if](https://youtu.be/dhurClkDGrc) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Conditional +- Ітерування + - ⭐ [Цикли for, for..of, for..in](https://youtu.be/Ph-luU2sbdg) + - ⭐ [Цикли while, do..while](https://youtu.be/3ZC4O5dM5pY) + - ✨ [Ітерування, цикли та ітератори](https://youtu.be/lq3b5_UGJas) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Iteration +- Колекції + - ⭐ [Колекції — Array, Object](https://youtu.be/SqGoKGOZu40) + - 🧑‍💻 Масиви: https://github.com/HowProgrammingWorks/Arrays + - ✨ [Масиви, об'єкти, класи, прототипи JavaScript](https://youtu.be/VBMGnAPfmsY) + - ✨ [Массивы в JavaScript, методы Array](https://youtu.be/D1kfYBkX9FE) + - 🧑‍💻 Структури даних: https://github.com/HowProgrammingWorks/DataStructures + - ⭐ [Домішки (mixin), JSON серіалізація (serialization)](https://youtu.be/rMUB78bs26w) + - ⭐ [Множини (Set) та хеш-таблиці (Map)](https://youtu.be/1avvpS_Hqms) + - ✨ [Коллекции, множества, хеш таблицы в JavaScript](https://youtu.be/hN0wsq5LNOc) + - 🧑‍💻 Колекції: https://github.com/HowProgrammingWorks/Collections + - 🧑‍💻 Хеш таблиці: https://github.com/HowProgrammingWorks/Map + - 🧑‍💻 Множини (Set): https://github.com/HowProgrammingWorks/Set +- Практичні завдання + - ⭐ [Нові практичні завдання 1-5](https://youtu.be/4I2iL3JjFdM) + - ✨ [Налаштування середовища: Node.js, npm, git, eslint](https://youtu.be/hSyA7tcNaCE) Дивитись вибірково, що не зрозуміло – пропускайте + - ✨ Старий семінар: [Автоматична перевірка лабораторних робіт](https://youtu.be/M4KpG0LEAyA) + - ✨ Семінар: [Виконання лабораторних робіт з курсу](https://youtu.be/ikUOyFPzdJw) + - 🧑‍💻 Підготовка середовища виконання завдань: [Exercises.ru.md](https://github.com/HowProgrammingWorks/Introduction/blob/master/Exercises.ru.md) + - 🧑‍💻 Завдання: [SEF1.ru.md](https://github.com/HowProgrammingWorks/Index/blob/master/Practice/SEF1.ru.md) +- Callbacks, timers + - ⭐ [Функції зворотнього виклику (callbacks) та таймери](https://youtu.be/MFG3NaEwu70) + - 🧑‍💻 Функції зворотнього виклику: https://github.com/HowProgrammingWorks/Callbacks + - ✨ [Функції вищого порядку, колбеки, події](https://youtu.be/1vqATwbGHnc) + - 🧑‍💻 Функції вищого порядку: https://github.com/HowProgrammingWorks/HigherOrderFunction + - ✨ [Таймеры, таймауты и EventEmitter](https://youtu.be/LK2jveAnRNg) + - 🧑‍💻 Таймери: https://github.com/HowProgrammingWorks/Timers + - 🧑‍💻 EventEmitter: https://github.com/HowProgrammingWorks/EventEmitter + - 🧑‍💻 Події: https://github.com/metarhia/common/blob/master/lib/events.js +- Замикання (closures) + - ⭐ [Замикання closures, (функції + контексти)](https://youtu.be/_FranqU7420) + - ✨ [Функції, стрілочні функції, контексти, замикання JavaScript](https://youtu.be/pn5myCmpV2U) + - 🧑‍💻 Замикання (closures): https://github.com/HowProgrammingWorks/Closure + - 🧩 [Часткове застосування та curry](https://youtu.be/ND8KQ5xjk7o) + - 🧑‍💻 Часткове застосування: https://github.com/HowProgrammingWorks/PartialApplication +- Асинхронність + - ⭐ [Асинхронні функції, async, await](https://youtu.be/_3rRFN3iwsg) +- Обробка помилок + - ⭐ [Помилки (Error), та обробка exception](https://youtu.be/UmpMa-f7dM4) +- Модульність + - ⭐ [Системи модульності ESM (ECMAScript) та CJS (CommonJS)](https://youtu.be/MQepk3r41Rc) + - ⭐ [Декомпозиція програми на модулі](https://youtu.be/4SLMmET8ARM) +- Рекурсія + - ⭐ [Рекурсія, вихід з рекурсії та stack trace](https://youtu.be/bRgUmZgmXAg) + - ✨ [Рекурсія: непряма та хвостова, стек, вихід](https://youtu.be/W2skCjIgVKE) + - 🧑‍💻 Рекурсія: https://github.com/HowProgrammingWorks/Recursion +- ✨ [Робота з рядками, шаблонами та юнікодом](https://youtu.be/GcopcHQkA8M) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/String +- ✨ [Антипатерни загальні для всіх парадигм](https://youtu.be/NMUsUiFokr4) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Antipatterns/tree/master/JavaScript/01-Common +- ✨ [Консоль та командний рядок у JavaScript та Node.js](https://youtu.be/5aSZyKi5BmE) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/CommandLine +- 🧩 [Чеининг функций и объектов, обработка ошибок](https://youtu.be/PfuEfIiLX34) + - 🧑‍💻 Чеінінг: https://github.com/HowProgrammingWorks/Chaining + - 🧑‍💻 Обробка помилок: https://github.com/HowProgrammingWorks/Errors +- ✨ [Антипатерни процедурного програмування](https://youtu.be/cTv7V22mkwE) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Antipatterns/tree/master/JavaScript/02-Procedural +- ✨ [Code Review: как это и зачем](https://youtu.be/EKL6NiIQ6ZU) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/CodeReview + - Семинар: [Code Review, ответы на вопросы](https://youtu.be/AgH4OAKbmkM) +- ✨ [Структури даних: списки, стек, черга, дек](https://youtu.be/9KvA4hDDSjk) + - 🧑‍💻 Списки: https://github.com/HowProgrammingWorks/LinkedList + - 🧑‍💻 Черги: https://github.com/HowProgrammingWorks/Dequeue +- ✨ [Сериализация и десериализация в JavaScript и Node.js](https://youtu.be/GtKPniOEzh8) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Serialization +- ✨ [Рефакторинг: причины, цели, техники и процесс](https://youtu.be/z73wmpdweQ4) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Refactoring + - 🧑‍💻 Пример проекта: https://github.com/tshemsedinov/node-mysql-utilities +- 🧩 Семінар: [Вибір напряму у програмуванні](https://youtu.be/1gL627DQF4A) +- 🧩 [Proxy та Symbol](https://youtu.be/UjZjSDyi9AM) + - 🧑‍💻 Проксі: https://github.com/HowProgrammingWorks/Proxy + - 🧑‍💻 Символи: https://github.com/HowProgrammingWorks/Symbol +- ✨ [Регулярні вирази та парсинг у JavaScript](https://youtu.be/-ef2E0ozxao) + - 🧑‍💻 Примеры кода: https://github.com/HowProgrammingWorks/RegExp +- ✨ [Композиція: pipe, compose](https://youtu.be/xS9FicVrOTI) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Composition +- ✨ [Домішки: mixin, extend, Object.assign, class-mixin](https://youtu.be/NZMrJ2adEyY) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Mixin + - 🧩 Стара версія лекцій: https://youtu.be/2h9syXN5wO0 +- 🧩 [Прототипне програмування та прототипне успадкування](https://youtu.be/SzaXTW2qcJE) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/PrototypeChain + - ✨ Прототипи: https://github.com/HowProgrammingWorks/Prototype +- 🧩 [Мемоізація: memoize](https://youtu.be/H6S8QJo2Qxg) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Memoization + - 🧑‍💻 Стара версія лекцій: https://youtu.be/2h9syXN5wO0 +- 🧩 [Фабрики та пули об'єктів у JavaScript, factorify, poolify](https://youtu.be/Ax_mSvadFp8) + - 🧑‍💻 Фабрики: https://github.com/HowProgrammingWorks/Factory + - 🧑‍💻 Пули об'єктів: https://github.com/HowProgrammingWorks/Pool +- 🧩 [Функції-обгортки: wrappers](https://youtu.be/En7pWi2fSzs) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Wrapper + - 🧩 Стара версія лекцій: https://youtu.be/2h9syXN5wO0 +- 🧩 [Типізовані масиви JavaScript](https://youtu.be/tTNcqxbxhfY) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/TypedArrays +- 🧩 [Нове у JavaScript](https://youtu.be/fUjHLj8bq_Y) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/ESNext From b26c0b08e8cd24dd622a42b323160cbb5f7670d9 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 15 Sep 2024 14:51:13 -0400 Subject: [PATCH 136/217] Update Talks.md --- Courses/Talks.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index dc6b646..c7d6a7c 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -5,6 +5,9 @@ - [Все ли плохо с Diia](https://youtu.be/6X6MaXoQdw8) - [👏 Дія відкрила код - Diia code review 🤦](https://youtu.be/ggIk83GO25I) - [Дія» открыла код! Что не так?](https://www.youtube.com/watch?v=Ug-tytIlhU0) +- [Паттерны в JavaScript с примерами и культура кода на ITBeard](https://www.youtube.com/live/vDOe1v76w5Y) +- [Об оптимизации паттернов для JavaScript с Деми Мурычем](https://www.youtube.com/watch?v=LJJpbFcmKQs) +- [Беседа с Ильей Климовым о целях паттернов](https://youtube.com/live/Jru7q-OjWX8) ## 2023 From 08e0def965c727c2b481ba5cfd9eb6ccc9d66ff9 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 21 Sep 2024 10:28:46 -0400 Subject: [PATCH 137/217] Create Patterns-2024.md --- Courses/Patterns-2024.md | 176 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 Courses/Patterns-2024.md diff --git a/Courses/Patterns-2024.md b/Courses/Patterns-2024.md new file mode 100644 index 0000000..0f1d689 --- /dev/null +++ b/Courses/Patterns-2024.md @@ -0,0 +1,176 @@ +# 🚀 Patterns 2024 Training + +***Rethinking GRASP, SOLID, and GoF for JavaScript and Node.js*** + +> Translations: [EN](./Patterns-2024.md), [UA](./Patterns-2024-ua.md), [RU](./Patterns-2024-ru.md) + +Practical training for rethinking and applying **GRASP**, **SOLID**, **GoF** patterns in asynchronous programming and JavaScript for application and system developers, backend and frontend, Node.js and browser applications. + +Understanding these concepts can't just be extracted from a box (or book) and placed into your maind. It varies greatly for different languages and platforms. +Blindly transferring knowledge and practices from C++ or Java to **JavaScript** and C# results in dead ceremonies. +However, they can be revived through practice, tied to realities, and rethought to avoid becoming monstrous and horrors. + +## 💡 Ultimate Uniqueness + +From the author of the first course on asynchronous programming in JavaScript (17 years ago, KPI University), many conference talks and lectures on Node.js. Over the years, a lot of experience, code reviews, and practices have been collected and analized to rework the course almost every year, absorbing the best practices. Timur Shemsedinov is also a contributor to many platforms and libraries in open source, including Node.js, Metarhia, geoip-lite, MDN, HowProgrammingWorks, metasync... Timur is one of the first who began to port parallel programming abstractions from C++, C#, Java, Go and other languages ​​to JavaScript. + +Here's what I suggest learning and practicing: + +* 📂 Module Systems, Dependency Injection, and Inversion of Control +* 📦 Decomposition of Abstractions and GRASP Principles +* 🧩 Gang of Four patterns rethinked for JavaScript realities +* 🔮 Principles of Isolation and SoC (Separation of Concerns) +* 👷🏻‍♂️ Separation of Applied and System Code +* 🧩 SOLID principles: Single Responsibility, OCP, ISP, DIP, LSP +* 🌟 Multi-Paradigm Programming and Domain-Specific Languages +* 🧩 Contract Programming and Modeling with Schemas +* 🏛️ Clean Architecture and Layered Architecture + +## 📖 Course Structure + +### 📦 Unit 1: Structure and Modularity + +Why do we need rethinking and adapting GoF, SOLID, and GRASP for JavaScript/TypeScript realities. How to do it? + +**🗓️ Week 1: Code Characteristics and Optimization Strategies** + +> There is a path that leads to radical improvement of the structure and +characteristics of your code. GoF, SOLID, GRASP principles and +patterns, how to apply them and what do we get. Code characteristics: +readability (understanding), reliability, testability, +maintainability, reusability, flexibility, security. Optimal use of +computing resources: processor, memory, input-output and cognitive +resources of developers. + +**🗓️ Week 2: Native features in language and platforms** + +> JavaScript has built-in contracts: Thenable, Iterable, AsyncIterator, +Callback-last, Callable, Cancelable, Observable, but the culture of +developing through contracts and interfaces is not popular enough in +the community. How can we improve development performance with +Knowledge-driven approach. How patterns may help us in this direction: +to delivery quick and effective, to be performant, to make everydays +work interesting, to be motivated and never burnout. + +**🗓️ Week 3: Instantiation: Creational Patterns and Techniques** +> Creational patterns: Constructor, Singleton, Factory, Pool, Builder, +Prototype, Flyweight, other patterns and techniques. Let’s find +related principles and rethink applied importance of GRASP: Creator; +GRASP: Polymorphism, SOLID: ISP; Aggregation and Composition. How to +Save memory and other resources; how to use optimizations and caching. +How to develop extremely quick and low-latency code for any devices +we need to support and make this code clear for colleagues. + +**🗓️ Week 4: Isolation and Separation of Concerns** + +> SoC is a general engineering principle to build flexible, reliable, +and easy-modifying systems. We may use GoF patterns: Mediator, Bridge, +Abstract factory, Strategy (JavaScript-specific implementation: +Map); Modularity; GRASP: Information +Expert, Indirection, and Protected variations principles; SOLID: SRP; +This will improve code testability and reduce integration expenses. + +### 📦 Unit 2: Execution and Contracts + +Working with application modules/components integration we need +contract programming; it allows us to develop parts independently; +scale the team; improve project manageability and make a development +plan much predictable. + +**🗓️ Week 5: Contracts: Interfaces for Component Interaction** + +> Patterns: Adapter (Wrapper), Facade, Bridge, Composite, Proxy, +Promisify; Front controller; GRASP: Low Coupling and High Cohesion; +SOLID: LSP (Liskov); and SOLID: OCP (Open-Closed); It opens +the possibility of step-by-step refactoring, overcoming technical debt +and increasing subsystem stability; reducing influence (coupling) +between layers and modules. At the top level this makes possible to +scale the team, manage priorities, and make architectural decisions. + +**🗓️ Week 6: Decoupling with Events and Messaging** + +> Next great approach is event-based programming. This is useful in UIs, +distributed systems, shared resources cooperative access. Async and +event-driven programming made Node.js the ultimate solution for +non-blocking I/O. We will consider GRASP: Pure Fabrication and Low +Coupling; AsyncQueue and queueing systems, Async collections, etc. + +**🗓️ Week 7: Streams: Data Flows and Transformations** + +> Reactive programming has become a separate paradigm; Streams and +Signals are based on GRASP: Pure Fabrication and Event-driven approach +with data transformation operators it is widely used in network +protocols, file system and data access, game dev and financial and +analytical systems, embedded devices control and telemetry; other +subject areas. It gives expressive syntax, higher level of +abstraction, flexibility and performance for better user experience. + +**🗓️ Week 8: Handling Errors: Exceptions and Soft Failures** + +> We will explore error-handling best practices using both +exceptions and domain-specific (soft errors). Gracefully recover and +soft failures will increase whole system performance. We will use +Chain of Responsibility, SOLID, Promises, fallback mechanisms to +handle non-critical errors; GRASP: Protected Variations and Custom +JavaScript-specific AggregateError and Error.prototype.cause and +error serialization for network transmission. + +### 📦 Unit 3: Runtime for Applications + +Bringing everything together under real-world conditions. In this unit, +we'll explore how the foundational concepts of structure, contracts, and +patterns translate into running, scalable applications. This part will +focus on how runtime considerations shape architectural decisions. + +**🗓️ Week 9: Semantics: Expressive DSLs** + +> To improve code expressiveness and clearer semantics; any complex +software needs to invent DSL (domain-specific language). For DSL we +can use well-known syntax, JSON, JSON5, Markdown, and even JavaScript +itself. We will consider patterns: Command, Interpreter, State, +Strategy, Visitor. DSLs makes code readable for domain experts, +analytics and even experienced users. It enhances communication and +understanding, speeds up development, adapt easily to new +requirements, simplify onboarding and knowledge transfer, hides +technical complexity, allows specialists to focus on certain field, +improving project predictability. + +**🗓️ Week 10: All-agnostic as a Default Strategy** + +> Developing frameworks-agnostic, platform-agnostic, protocol-agnostic, +database-agnostic, cloud-agnostic systems as a default approach to +ensure flexibility and free architectural solutions; removes vendor +lock, etc. We certainly don't need to implement all aspects of +agnostic approach, but some of them will bring valuable benefits in +system scaling and during system operation. We will use isolation, +GRASP: Controller; SOLID: DIP; using IoC and DI; using interfaces and +Strategy pattern to decouple from implementations. + +**🗓️ Week 11: Scaling Applications and Architectural Styles** + +> This week we'll explore how to design systems that can scale and +evolve efficiently by leveraging different architectural styles: such +as DDD, Layered Architecture, SOA, Microservices, Event-Driven, +Monolithic, Ports and Adapters, Clean Architecture, Event-Sourcing, +CQRS, Pipeline, Peer-to-Peer, Client-Server Architecture and how +SOLID, GRASP and GoF can help us in implementing architecture. + +**🗓️ Week 12: Methodology: How to Start Applying Concepts** + +> The final part of the program focuses on practical application. +We will go over how to start implementing the concepts and patterns +covered in the course in real-world projects. This session provides +actionable strategies to build a roadmap for adoption. How to identify +the need for patterns and principles. Refactoring legacy Systems, +Introduction of new development techniques and activities; How to +building a Roadmap: Planning your own learning and team development +using the course principles. + +## Tariff plans + +* Minimal: learning in a common group without a mentor but with interactive calls +* Standard: training with mentor in small groups (up to 10 people) +* Prefessional: training with mentor, 1-on-1, groups, and additional materials +* Exclusive $10000: personalized training track with a couse author + +[👉 Buy: https://nodeua.com/Patterns-2024-buy.html](https://nodeua.com/Patterns-2024-buy.html) From 5996b8a44602c26e3201f135c3850bcdadbcf349 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 21 Sep 2024 10:32:08 -0400 Subject: [PATCH 138/217] Update Patterns-2024.md --- Courses/Patterns-2024.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/Courses/Patterns-2024.md b/Courses/Patterns-2024.md index 0f1d689..89274fd 100644 --- a/Courses/Patterns-2024.md +++ b/Courses/Patterns-2024.md @@ -2,8 +2,6 @@ ***Rethinking GRASP, SOLID, and GoF for JavaScript and Node.js*** -> Translations: [EN](./Patterns-2024.md), [UA](./Patterns-2024-ua.md), [RU](./Patterns-2024-ru.md) - Practical training for rethinking and applying **GRASP**, **SOLID**, **GoF** patterns in asynchronous programming and JavaScript for application and system developers, backend and frontend, Node.js and browser applications. Understanding these concepts can't just be extracted from a box (or book) and placed into your maind. It varies greatly for different languages and platforms. From 0ba3e3c0519403bde080e77e229e8c5d00ef0e26 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 21 Sep 2024 10:32:49 -0400 Subject: [PATCH 139/217] Update Patterns-2024.md --- Courses/Patterns-2024.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/Patterns-2024.md b/Courses/Patterns-2024.md index 89274fd..0c6a8a4 100644 --- a/Courses/Patterns-2024.md +++ b/Courses/Patterns-2024.md @@ -169,6 +169,6 @@ using the course principles. * Minimal: learning in a common group without a mentor but with interactive calls * Standard: training with mentor in small groups (up to 10 people) * Prefessional: training with mentor, 1-on-1, groups, and additional materials -* Exclusive $10000: personalized training track with a couse author +* Exclusive: personalized training track with a couse author [👉 Buy: https://nodeua.com/Patterns-2024-buy.html](https://nodeua.com/Patterns-2024-buy.html) From b3a6820b0344027443b7151044049c3e39041d51 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 22 Sep 2024 06:46:31 -0400 Subject: [PATCH 140/217] Create Patterns-2024-ua.md --- Courses/Patterns-2024-ua.md | 119 ++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 Courses/Patterns-2024-ua.md diff --git a/Courses/Patterns-2024-ua.md b/Courses/Patterns-2024-ua.md new file mode 100644 index 0000000..b3e211f --- /dev/null +++ b/Courses/Patterns-2024-ua.md @@ -0,0 +1,119 @@ +# 🚀 Patterns 2024 Тренінг із наставниками + +***Rethinking GRASP, SOLID, and GoF for JavaScript and Node.js*** + +> Translations: [EN](./Patterns-2024.md), [UA](./Patterns-2024-ua.md), [RU](./Patterns-2024-ru.md) + +Практичний тренінг з переосмислення та застосування патернів GoF, SOLID та GRASP в асинхронному програмуванні на JavaScript та Type для прикладних та системних розробників бекенду та фронтенду, з прикладами для Node.js та браузерних додатків. + +Розуміння цих концепцій не можна просто витягти з коробки (або книги) і помістити собі у голову. Таке розуміння сильно відрізняється для різних мов та платформ. +Сліпе перенесення знань і практик з C++ або Java в **JavaScript** та C# призводить до мертвих церемоній. +Однак їх можна відродити за допомогою практики, прив'язати до реалій та переосмислити, щоб вони не стали марними монстрами. + +## 💡 Унікальність програми наставництва + +Від автора першого курсу з асинхронного програмування на JavaScript, прочитаного в Київському політехнічному інституті ще 17 років тому, безліч доповідей та лекцій з Node.js. За ці роки зібрано багато досвіду, відгуків, практики, усі курси автора перероблялися практично щороку, вбираючи найновіші пактики. Тимур Шемсединов також є контриб'ютором багатьох платформ і бібліотек у відкритому коді, серед яких Node.js, Metarhia, geoip-lite, MDN, HowProgrammingWorks, metasync... Тимур один з перших, хто почав портувати в JavaScript абстракції паралельного програмування з C++, C#, Java, Go та інших мов. + +Автор стверджує, що це найважливіші речі, які слід вивчати та практикувати: + +* 📂 Системи модульності, Dependency Injection (DI) та інверсія управління (IoC) +* 📦 Декомпозиція абстракцій та принципи GRASP із сучасною інтерпретацією +* 🧩 Паттерни «Банди чотирьох» (GoF) переосмислені для JavaScript та TypeScript +* 🔮 Принципи ізоляції та SoC (Розподіл відповідальності) +* 👷🏻‍♂️ Відокремлення прикладного та системного коду (різні спеціальності) +* 🧩 Принципи SOLID: SRP, OCP, ISP, DIP, LSP з адаптацією для різних парадигм +* 🌟 Мультипарадигменне програмування та створення доменних мов (DSL) +* 🧩 Контрактне програмування та декларативне моделювання через схеми +* 🏛️ Чиста архітектура (Clean) та лукова архітектура (Onion або Layered) + +## 📖 Структура курсу + +### 📦 Unit 1: Structure and Modularity + +Структура та модульність. Чому потрібно переосмислити та адаптувати GoF, SOLID та GRASP для сучасного JavaScript/TypeScript. Як це зробити? + +> Ми навчимося застосовувати патерни та принципи на практичних завданнях, які зустрічаються у типових проектах, а також проведемо паралелі між теорією з класичних книг та щоденною практикою, покажемо, що всі ці знання потрібні не лише на співбесідах, а й дозволяють покращити характеристики коду ваших проектів та розуміння між фахівцями у колективі. + +Що ми отримуємо як результат цього юніту: + ++ Починаємо писати код, який зручно покривати тестами. ++ Наш код стає кращим для читання та розуміння. ++ Після оптимізації наш повільний код стає швидше і їсть менше пам'яті. ++ Код стає модульним, надійним і готовим до інтеграції. ++ Як змінити код, щоб зменшити час, необхідний для його підтримки. + +> Для кожного тижня підготовлені завдання, деякі з них передбачають рефакторинг готових прикладів коду, інші – написання коду, треті – оптимізацію та дослідження характеристик коду. + +**🗓️ Week 1: Характеристики коду та стратегії оптимізації** + +> Існує шлях, який веде до радикального покращення структури та характеристик коду. Ми розглянемо принципи та шаблони GoF, SOLID, GRASP, як їх застосовувати та що вони дають. Характеристики коду: читання, надійність, тестування, підтримуваність, повторне використання, гнучкість, безпека. Оптимальне використання обчислювальних ресурсів: процесор, пам'ять, введення-виведення та когнітивні ресурси розробників. + +**🗓️ Week 2: Вбудовані можливості в мові та платформі** + +> JavaScript має вбудовані контракти: Thenable, Iterable, AsyncIterator, Callback-last, Callable, Cancelable, Observable, але культура розробки через контракти та інтерфейси не дуже поширена у спільноті. Як покращити продуктивність розробки за допомогою підходу, що базується на знаннях. Як шаблони можуть допомогти нам у цьому: реалізовувати нові фічі швидко та ефективно, бути продуктивними, робити щоденну роботу цікавою, бути вмотивованими та не вигорати. + +**🗓️ Week 3: Інстанціювання: шаблони та техніки створення екземплярів** + +> Шаблони створення екземплярів: Constructor, Singleton, Factory, Pool, Builder, Prototype, Flyweight, інші шаблони і техніки. Давайте знайдемо пов'язані принципи та переосмислимо прикладне значення GRASP: Creator; GRASP: Polymorphism, SOLID: ISP; Aggregation і Composition. Як заощаджувати пам'ять та інші ресурси; як ефективно застосовувати оптимізацію та кешування. Як розробляти вкрай швидкий код та мінімізувати latency, зробити код крос-платформним та зрозумілим для колег. + +**🗓️ Week 4: Ізоляція та розподіл відповідальності (SoC)** + +> Separation of Concerns (SoC) — це загальний інженерний принцип, спрямований на створення гнучких, надійних систем, що легко модифікуються. Ми можемо використовувати шаблони GoF: Mediator, Bridge, Abstract factory, Strategy (в JavaScript реалізації: Map); Системи модульності; GRASP принципи Information Expert, Indirection, та Protected variations; SOLID: SRP. Це покращить тестованість коду та знизить витрати на інтеграцію. + +### 📦 Unit 2: Execution and Contracts + +Для побудови структури програми з модулів та програмних компонентів, нам потрібен контрактний підхід до програмування, він дозволяє розробляти частини системи незалежно, масштабувати команду, покращувати керованість проектами та робити план розробки більш передбачуваним. + +> Ми будемо застосовувати три типи зв'язування: зв'язування через дані, зв'язування через виклики та зв'язування через події. Ми навчимося керувати зачепленням між компонентами програмних систем та проектувати їх таким чином, щоб мати можливість динамічно збирати з них програми, відкладаючи рішення про компонування. Іншими словами, наше завдання на етапі проектування не прибити все цвяхами, а надати архітектору можливість пізнього маневру. + ++ Навчимося створювати структуру коду. ++ Навчимося створювати структуру колективу, що відповідає структурі коду. (За законом Конвея: «організації проектують системи, які копіюють структуру комунікацій у цій організації»). ++ Відпрацьовуємо написання додатків, що добре підтримуються. + +**🗓️ Week 5: Контракти: інтерфейси для взаємодії компонентів** + +> Паттерни: Adapter (Wrapper), Facade, Bridge, Composite, Proxy, Promisify; Front controller; GRASP: Low Coupling and High Cohesion; SOLID: LSP (Liskov); та SOLID: OCP (Open-Closed). Застосування контрактів відкриває можливість покрокового рефакторингу, усунення технічного боргу та підвищення стабільності підсистем; зниження залежності (зв'язаності) між шарами та модулями. На рівні управління проектом це дозволяє масштабувати команду, керувати пріоритетами та приймати архітектурні рішення. + +**🗓️ Week 6: Послаблення зачеплення в коді через події та повідомлення** + +> Наступний потужний підхід - це застосування шин подій всередині програми та між підсистемами. Це поширене в інтерфейсах користувача, розподілених системах, спільному доступі до шарених ресурсів. На базі асинхронного програмування та програмування через потоки подій побудовано рішення з неблокуючим введенням-виводом в Node.js. Ми розглянемо GRASP: Pure Fabrication and Low Coupling; AsyncQueue and queueing systems, Async collections, та інші. + +**🗓️ Week 7: Streams: Потоки даних та їх перетворення** + +> Реактивне програмування розвинулося у окрему парадигму; потоки та сигнали засновані на GoF: Observer; GRASP: Pure Fabrication та Event-driven підході з потоками даних та операторами перетворення даних. Це широко використовується в мережевих протоколах, доступі до даних та файлових систем, розробки ігор, фінансових та аналітичних систем, управління вбудованими системами, телеметрії та інших областях. Це дає виразний синтаксис, більш високий рівень абстракції, гнучкість і продуктивність для поліпшення досвіду користувача (UX). + +**🗓️ Week 8: Обробка помилок: Exceptions та Soft Failures** + +> Ми розглянемо найкращі практики обробки помилок як із винятковими ситуаціями, так і доменними (м'якими) помилками. Gracefully recover та м'які помилки підвищать загальну продуктивність системи. Ми будемо використовувати Chain of Responsibility, SOLID, Promises, fallback mechanisms to handle non-critical errors; GRASP: Protected Variations and Custom JavaScript-specific AggregateError and Error.prototype.cause, а також серіалізацію помилок для передачі по мережі. + +### 📦 Unit 3: Runtime for Applications + +Об'єднання всіх розглянутих технік та підходів у реальних умовах. У цьому юніті ми розглянемо, як основні концепції побудови структури додатків, контрактне програмування та шаблони перетворюються на працюючі та масштабовані додатки. + +> Цей модуль зосереджений у тому, як питання середовища виконання лягають завдання структури та архітектури додатків. Ви отримаєте навичку впровадження технік програмування, що перетворюють програмне рішення на цифрову платформу, розраховану на тривалу експлуатацію; це включає підтримку зміни інструментарію, розширення колективу, постійне інтенсивне нарощування функціональності та навантажень. + +**🗓️ Week 9: Семантика: виразні DSL** + +> Для покращення виразності коду та ясності семантики будь-яке складне програмне забезпечення потребує створення DSL (мов, спеціалізованих для предметної області). При розробці DSL можна використовувати добре відомі синтаксиси, такі як JSON, JSON5, Markdown і навіть JavaScript. Ми розглянемо патерни: Command, Interpreter, State, Strategy, Visitor. DSL робить код зрозумілим для аналітиків предметної області та навіть досвідчених користувачів. Це покращує спілкування та розуміння, прискорює розробку, адаптацію рішень до нових вимог, спрощує навчання та передачу знань, приховує технічні складності та дозволяє фахівцям зосередитися на своїй галузі, покращуючи загальну передбачуваність проекту. + +**🗓️ Week 10: All-agnostic як стратегія за замовчуванням** + +> Розробка систем, незалежних від фреймворків, платформ, протоколів, баз даних та хмарних рішень, як стандартний підхід для забезпечення гнучкості та свободи архітектурних рішень. Такий підхід усуває залежність від постачальників хмарних рішень та фреймворків. Звичайно, не потрібно реалізовувати всі аспекти агностичного підходу, але деякі з них принесуть значні вигоди в масштабуванні системи та в процесі її експлуатації. Ми будемо використовувати ізоляцію, GRASP: Controller; SOLID: DIP; принципи IoC та DI; інтерфейси та патерн Strategy для відв'язування від конкретних реалізацій. + +**🗓️ Week 11: Масштабування додатків та архітектурні стилі** + +> На цьому тижні ми розглянемо, як проектувати системи, які можуть масштабуватися та розвиватися ефективно, використовуючи різні архітектурні стилі: DDD, листкова архітектура, SOA, мікросервіс, подійна архітектура, монолітна, порти та адаптери, чиста архітектура, Event-Sourcing, CQRS, Pipeline , Peer-to-Peer, Client-Server архітектура та як застосовувати SOLID, GRASP та GoF для реалізації архітектури. + +**🗓️ Week 12: Методологія: як почати застосовувати концепції** + +> Заключна частина програми тренінгу зосереджена практичному застосуванні всіх знань у комплексі. Ми розглянемо, як почати впроваджувати концепції та шаблони, вивчені на курсі у реальних проектах. Цей модуль надає практичні стратегії для створення дорожньої карти щодо їх впровадження. Як виявити необхідність у шаблонах та принципах та врахувати можливі негативні аспекти. Рефакторинг успадкованих систем, впровадження нових методів розробки та активностей у колективі. Як спланувати власне навчання та налагодити розвиток команди з використанням знань із цього тренінгу. + +## Тарифні плани + +* Minimal: навчання у загальній групі без наставника, але з груповими семінарами +* Standard: навчання з наставником у невеликих групах (10 осіб) +* Professional: навчання з наставником, індивідуально та в групах, додаткові матеріали +* Exclusive: персоналізований навчальний трек з автором курсу та запрошеними експертами + +[👉 Придбати: https://nodeua.com/Patterns-2024-buy.html](https://nodeua.com/Patterns-2024-buy.html) + From db5b7c7b24dba2d0edf2b38cccd0763818a558fa Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 22 Sep 2024 06:46:39 -0400 Subject: [PATCH 141/217] Create Patterns-2024-ru.md --- Courses/Patterns-2024-ru.md | 118 ++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 Courses/Patterns-2024-ru.md diff --git a/Courses/Patterns-2024-ru.md b/Courses/Patterns-2024-ru.md new file mode 100644 index 0000000..2ef247c --- /dev/null +++ b/Courses/Patterns-2024-ru.md @@ -0,0 +1,118 @@ +# 🚀 Patterns 2024 Тренинг с наставниками + +***Rethinking GRASP, SOLID, and GoF for JavaScript and Node.js*** + +> Translations: [EN](./Patterns-2024.md), [UA](./Patterns-2024-ua.md), [RU](./Patterns-2024-ru.md) + +Практический тренинг по переосмыслению и применению паттернов GoF, SOLID и GRASP в асинхронном программировании на JavaScript и Type для прикладных и системных разработчиков бекенда и фронтенда, с примерами для Node.js и браузерных приложений. + +Понимание этих концепций нельзя просто извлечь из коробки (или книги) и поместить себе в голову. Такое понимание сильно различается для разных языков и платформ. +Слепой перенос знаний и практик из C++ или Java в **JavaScript** и C# приводит к мертвым церемониям. +Однако их можно возродить с помощью практики, привязать к реалиям и переосмыслить, чтобы они не стали бесполезными монстрами. + +## 💡 Уникальность программы наставничества + +От автора первого курса по асинхронному программированию на JavaScript, прочитанному в Киевском политехническом институте еще 17 лет назад, множества докладов и лекций по Node.js. За эти годы собрано множество опыта, отзывов, практики и курс перерабатывался практически каждый год, вбирая самые новые пактики. Тимур Шемсединов так же является контрибьютором мноджества платформ и библиотек в открытом коде, среди которых Node.js, Metarhia, geoip-lite, MDN, HowProgrammingWorks, metasync... Тимур один из первых, кто начал портировать в JavaScript абстракции параллельного программирования из C++, C#, Java, Go и других языков. + +Автор утверждает, что это самые важные вещи, которые следует учить и практиковать: + +* 📂 Системы модульности, внедрение зависимостей (DI) и инверсия управления (IoC) +* 📦 Декомпозиция абстракций и принципы GRASP с современной интерпретацией +* 🧩 Паттерны «Банды четырех» (GoF) переосмысленные для JavaScript и TypeScript +* 🔮 Принципы изоляции и SoC (Разделение ответственностей) +* 👷🏻‍♂️ Разделение прикладного и системного кода (разные специальности) +* 🧩 Принципы SOLID: SRP, OCP, ISP, DIP, LSP с адаптацией для разных парадигм +* 🌟 Мультипарадигменное программирование и создание доменных языков (DSL) +* 🧩 Контрактное программирование и декларативное моделирование через схемы +* 🏛️ Чистая архитектура (Clean) и слоеная архитектура (Onion или Layered) + +## 📖 Структура курса + +### 📦 Unit 1: Structure and Modularity + +Структура и модульность. Почему нужно переосмыслить и адаптировать GoF, SOLID и GRASP для современного JavaScript/TypeScript. Как это сделать? + +> Мы научимся применять паттерны и принципы на практических задачах, которые встречаются в типичных проектах, а также проведем параллели между теорией из классических книг и ежедневной практикой, покажем, что все эти знания нужны не только на собеседованиях, а позволяют улучшить характеристики кода ваших проектов и понимание между специалистами в коллективе. + +Что мы получаем как результат этого юнита: + ++ Начинаем писать код, который удобно покрываать тествми. ++ Наш код становится лучше для читения и понимания. ++ После оптимизации наш медленный код становится быстрее и ест меньше памяти. ++ Код становится модульный, надежный и готовый к интеграции. ++ Как изменить код, чтобы снизит время, необходимое для его поддержки. + +> Для каждой недели подготовлены задания, некоторые из них предусматривают рефакторинг готовых примеров кода, другие - написание кода, третьи - оптимизацию и исследование характериатстик кода. + +**🗓️ Week 1: Характеристики кода и стратегии оптимизации** + +> Существует путь, который ведет к радикальному улучшению структуры и характеристик кода. Мы рассмотрим принципы и шаблоны GoF, SOLID, GRASP, как их применять и что они дают. Характеристики кода: читаемость, надежность, тестируемость, поддерживаемость, повторное использование, гибкость, безопасность. Оптимальное использование вычислительных ресурсов: процессор, память, ввод-вывод и когнитивные ресурсы разработчиков. + +**🗓️ Week 2: Встроенные возможности в языке и платформе** + +> JavaScript имеет встроенные контракты: Thenable, Iterable, AsyncIterator, Callback-last, Callable, Cancelable, Observable, но культура разработки через контракты и интерфейсы не очень распространена в сообществе. Как улучшить производительность разработки с помощью подхода, основанного на знаниях. Как шаблоны могут помочь нам в этом: реализовывать новые фичи быстро и эффективно, быть производительными, делать ежедневную работу интересной, быть мотивированными и не выгорать. + +**🗓️ Week 3: Инстанцирование: порождающие шаблоны и техники** + +> Порождающие шаблоны: Constructor, Singleton, Factory, Pool, Builder, Prototype, Flyweight, другие шаблоны и техники. Давайте найдем связанные принципы и переосмыслим прикладное значение GRASP: Creator; GRASP: Polymorphism, SOLID: ISP; Aggregation и Composition. Как экономить память и другие ресурсы; как эффективно применять оптимизацию и кэширование. Как разрабатывать крайне быстрый код и минимизировать latency, сделать код кросс-платформенным и понятным для коллег. + +**🗓️ Week 4: Изоляция и разделение ответственности (SoC)** + +> Separation of Concerns (SoC) — это общий инженерный принцип, направленный на создание гибких, надежных и легко модифицируемых систем. Мы можем использовать шаблоны GoF: Mediator, Bridge, Abstract factory, Strategy (в JavaScript реализации: Map); Системы модульности; GRASP принципы Information Expert, Indirection, и Protected variations; SOLID: SRP. Это улучшит тестируемость кода и снизит затраты на интеграцию. + +### 📦 Unit 2: Execution and Contracts + +Для построения структуры приложения из модулей и программных компонентов, нам нужен контрактный подход к программированию, он позволяет разрабатывать части системы независимо, масштабировать команду, улучшать управляемость проектами и делать план разработки более предсказуемым. + +> Мы будем применять три типа связывания: связывание через данные, связывание через вызовы и связывание через события. Мы научимся управлять зацеплением между компонентами программных систем и проектировать их таким образом, чтобы иметь возможность собирать из них приложения, откладывая решения о компоновке. Другими словами, наша задача на этапе проектирования не прибить все гвоздями, а дать архитектору возможность позднего маневра. + ++ Научимся создавать структуру кода. ++ Научимся создавать структуру коллектива, соответствующую структуре кода. (По закону Конвея: «организации проектируют системы, которые копируют структуру коммуникаций в этой организации»). ++ Отрабатываем написание хорошо поддерживаемых приложений. + +**🗓️ Week 5: Контракты: интерфейсы для взаимодействия компонентов** + +> Паттерны: Adapter (Wrapper), Facade, Bridge, Composite, Proxy, Promisify; Front controller; GRASP: Low Coupling and High Cohesion; SOLID: LSP (Liskov); and SOLID: OCP (Open-Closed). Применение контрактов открывает возможность пошагового рефакторинга, устранения технического долга и повышения стабильности подсистем; снижения зависимости (связанности) между слоями и модулями. На уровне управления проектом это позволяет масштабировать команду, управлять приоритетами и принимать архитектурные решения. + +**🗓️ Week 6: Ослабление зацепления в коде через события и сообщения** + +> Следующий мощный подход — это применение шин событий внутри приложения и между подсистемами. Это распространено в пользовательских интерфейсах, распределенных системах, совместном доступе к разделяемым ресурсам. На базе асинхронного и событийного программирования построено решением с неблокирующим вводом-выводом в Node.js. Мы рассмотрим GRASP: Pure Fabrication and Low Coupling; AsyncQueue and queueing systems, Async collections, и другие. + +**🗓️ Week 7: Streams: Потоки данных и преобразования** + +> Реактивное программирование развилось в отдельную парадигму; потоки и сигналы основаны на GoF: Observer; GRASP: Pure Fabrication и Event-driven подходе с потоками данных и операторами преобразования данных. Это широко используется в сетевых протоколах, доступе к данным и файловым системам, разработке игр, финансовых и аналитических системах, управлении встроенными системами, телеметрии и других областях. Это дает выразительный синтаксис, более высокий уровень абстракции, гибкость и производительность для улучшения пользовательского опыта. + +**🗓️ Week 8: Обработка ошибок: исключения Exceptions and Soft Failures** + +> Мы рассмотрим лучшие практики обработки ошибок как с исключениями, так и доменными (мягкими) ошибками. Gracefully recover и мягкие ошибки повысят общую производительность системы. Мы будем использовать Chain of Responsibility, SOLID, Promises, fallback mechanisms to handle non-critical errors; GRASP: Protected Variations and Custom JavaScript-specific AggregateError and Error.prototype.cause, а также сериализацию ошибок для передачи по сети. + +### 📦 Unit 3: Runtime for Applications + +Объединение всех рассмотренных техник и подходов в реальных условиях. В этом юните мы рассмотрим, как основные концепции построения структуры приложений, контрактное программирование и шаблоны превращаются в работающие и масштабируемые приложения. + +> Этот модуль сосредоточен на том, как вопросы среды исполнения ложатся на задачи структуры и архитектуры приложений. Вы получите навык внедрения техник программирования, превращающих программное решение в цифровую платформу, рассчитанную на долгую эксплуатацию; это включает поддержку смены инструментария, расширения коллектива, постоянное интенсивное наращивание функциональности и нагрузок. + +**🗓️ Week 9: Семантика: выразительные DSL** + +> Для улучшения выразительности кода и ясности семантики любое сложное программное обеспечение требует создания DSL (языков, специализированных для предметной области). При разработке DSL можно использовать хорошо известные синтаксисы, такие как JSON, JSON5, Markdown и даже сам JavaScript. Мы рассмотрим паттерны: Command, Interpreter, State, Strategy, Visitor. DSL делает код понятным для аналитиков предметной области и даже опытных пользователей. Это улучшает общение и понимание, ускоряет разработку, адаптацию решений к новым требованиям, упрощает обучение и передачу знаний, скрывает технические сложности и позволяет специалистам сосредоточиться на своей области, улучшая общую предсказуемость проекта. + +**🗓️ Week 10: All-agnostic как стратегия по умолчанию** + +> Разработка систем, независимых от фреймворков, платформ, протоколов, баз данных и облачных решений, как стандартный подход для обеспечения гибкости и свободы архитектурных решений. Такой подход устраняет зависимость от поставщиков облачных решений и фреймворков. Конечно, не нужно реализовывать все аспекты агностичного подхода, но некоторые из них принесут значительные выгоды в масштабировании системы и в процессе ее эксплуатации. Мы будем использовать изоляцию, GRASP: Controller; SOLID: DIP; принципы IoC и DI; интерфейсы и паттерн Strategy для отвязки от конкретных реализаций. + +**🗓️ Week 11: Масштабирование приложений и архитектурные стили** + +> На этой неделе мы рассмотрим, как проектировать системы, которые могут масштабироваться и развиваться эффективно, используя различные архитектурные стили: DDD, слоеная архитектура, SOA, Микросервисм, событийная архитектура, монолитная, порты и адаптеры, чистая архитектура, Event-Sourcing, CQRS, Pipeline, Peer-to-Peer, Client-Server архитектура и как применять SOLID, GRASP и GoF для реализации архитектуры. + +**🗓️ Week 12: Методология: как начать применять концепции** + +> Заключительная часть программы тренинга сосредоточена на практическом применении всех знаний в комплексе. Мы рассмотрим, как начать внедрять концепции и шаблоны, изученные на курсе, в реальных проектах. Этот модуль предоставляет практические стратегии для создания дорожной карты по их внедрению. Как выявить необходимость в шаблонах и принципах и учесть возможные негативные аспекты. Рефакторинг унаследованных систем, внедрение новых методов разработки и активностей в коллективе. Как спланировать собственное обучение и наладить развитие команды с использованием знаний из этого тренинга. + +## Тарифные планы + +* Minimal: обучение в общей группе без наставника, но с групповыми семинарами +* Standard: обучение с наставником в небольших группах (10 человек) +* Professional: обучение с наставником, индивидуально и в группах, дополнительные материалы +* Exclusive: персонализированный учебный трек с автором курса и приглашенными экспертами + +[👉 Купить: https://nodeua.com/Patterns-2024-buy.html](https://nodeua.com/Patterns-2024-buy.html) From fb14fa87ab0c6e10c9d81a32bb621356684af0cc Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 22 Sep 2024 06:47:29 -0400 Subject: [PATCH 142/217] Add links --- Courses/Patterns-2024.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Courses/Patterns-2024.md b/Courses/Patterns-2024.md index 0c6a8a4..af9a8b1 100644 --- a/Courses/Patterns-2024.md +++ b/Courses/Patterns-2024.md @@ -2,6 +2,8 @@ ***Rethinking GRASP, SOLID, and GoF for JavaScript and Node.js*** +> Translations: [EN](./Patterns-2024.md), [UA](./Patterns-2024-ua.md), [RU](./Patterns-2024-ru.md) + Practical training for rethinking and applying **GRASP**, **SOLID**, **GoF** patterns in asynchronous programming and JavaScript for application and system developers, backend and frontend, Node.js and browser applications. Understanding these concepts can't just be extracted from a box (or book) and placed into your maind. It varies greatly for different languages and platforms. @@ -168,7 +170,7 @@ using the course principles. * Minimal: learning in a common group without a mentor but with interactive calls * Standard: training with mentor in small groups (up to 10 people) -* Prefessional: training with mentor, 1-on-1, groups, and additional materials +* Professional: training with mentor, 1-on-1, groups, and additional materials * Exclusive: personalized training track with a couse author [👉 Buy: https://nodeua.com/Patterns-2024-buy.html](https://nodeua.com/Patterns-2024-buy.html) From 6ed91b53ffe6d24fc4928970bedf2cceb4d490b9 Mon Sep 17 00:00:00 2001 From: Petr Nikitin Date: Sun, 22 Sep 2024 15:51:51 +0300 Subject: [PATCH 143/217] Update Patterns-2024-ru.md fix typo --- Courses/Patterns-2024-ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/Patterns-2024-ru.md b/Courses/Patterns-2024-ru.md index 2ef247c..239a00c 100644 --- a/Courses/Patterns-2024-ru.md +++ b/Courses/Patterns-2024-ru.md @@ -36,7 +36,7 @@ Что мы получаем как результат этого юнита: -+ Начинаем писать код, который удобно покрываать тествми. ++ Начинаем писать код, который удобно покрывать тестами. + Наш код становится лучше для читения и понимания. + После оптимизации наш медленный код становится быстрее и ест меньше памяти. + Код становится модульный, надежный и готовый к интеграции. From 3a0eef4ce1add7ff7a8c40d1fc6ada3d1e374b31 Mon Sep 17 00:00:00 2001 From: Roman Sarkiev Date: Sun, 22 Sep 2024 17:49:40 +0400 Subject: [PATCH 144/217] Fix spelling Patterns-2024-ru Co-authored-by: Timur Shemsedinov --- Courses/Patterns-2024-ru.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Courses/Patterns-2024-ru.md b/Courses/Patterns-2024-ru.md index 239a00c..437b827 100644 --- a/Courses/Patterns-2024-ru.md +++ b/Courses/Patterns-2024-ru.md @@ -12,7 +12,7 @@ ## 💡 Уникальность программы наставничества -От автора первого курса по асинхронному программированию на JavaScript, прочитанному в Киевском политехническом институте еще 17 лет назад, множества докладов и лекций по Node.js. За эти годы собрано множество опыта, отзывов, практики и курс перерабатывался практически каждый год, вбирая самые новые пактики. Тимур Шемсединов так же является контрибьютором мноджества платформ и библиотек в открытом коде, среди которых Node.js, Metarhia, geoip-lite, MDN, HowProgrammingWorks, metasync... Тимур один из первых, кто начал портировать в JavaScript абстракции параллельного программирования из C++, C#, Java, Go и других языков. +От автора первого курса по асинхронному программированию на JavaScript, прочитанному в Киевском политехническом институте еще 17 лет назад, множества докладов и лекций по Node.js. За эти годы собрано множество опыта, отзывов, практики и курс перерабатывался практически каждый год, вбирая самые новые практики. Тимур Шемсединов так же является контрибьютором множества платформ и библиотек в открытом коде, среди которых Node.js, Metarhia, geoip-lite, MDN, HowProgrammingWorks, metasync... Тимур один из первых, кто начал портировать в JavaScript абстракции параллельного программирования из C++, C#, Java, Go и других языков. Автор утверждает, что это самые важные вещи, которые следует учить и практиковать: @@ -37,12 +37,12 @@ Что мы получаем как результат этого юнита: + Начинаем писать код, который удобно покрывать тестами. -+ Наш код становится лучше для читения и понимания. ++ Наш код становится лучше для чтения и понимания. + После оптимизации наш медленный код становится быстрее и ест меньше памяти. + Код становится модульный, надежный и готовый к интеграции. -+ Как изменить код, чтобы снизит время, необходимое для его поддержки. ++ Как изменить код, чтобы снизить время, необходимое для его поддержки. -> Для каждой недели подготовлены задания, некоторые из них предусматривают рефакторинг готовых примеров кода, другие - написание кода, третьи - оптимизацию и исследование характериатстик кода. +> Для каждой недели подготовлены задания, некоторые из них предусматривают рефакторинг готовых примеров кода, другие - написание кода, третьи - оптимизацию и исследование характеристик кода. **🗓️ Week 1: Характеристики кода и стратегии оптимизации** @@ -102,7 +102,7 @@ **🗓️ Week 11: Масштабирование приложений и архитектурные стили** -> На этой неделе мы рассмотрим, как проектировать системы, которые могут масштабироваться и развиваться эффективно, используя различные архитектурные стили: DDD, слоеная архитектура, SOA, Микросервисм, событийная архитектура, монолитная, порты и адаптеры, чистая архитектура, Event-Sourcing, CQRS, Pipeline, Peer-to-Peer, Client-Server архитектура и как применять SOLID, GRASP и GoF для реализации архитектуры. +> На этой неделе мы рассмотрим, как проектировать системы, которые могут масштабироваться и развиваться эффективно, используя различные архитектурные стили: DDD, слоеная архитектура, SOA, Микросервисы, событийная архитектура, монолитная, порты и адаптеры, чистая архитектура, Event-Sourcing, CQRS, Pipeline, Peer-to-Peer, Client-Server архитектура и как применять SOLID, GRASP и GoF для реализации архитектуры. **🗓️ Week 12: Методология: как начать применять концепции** From a137b37ec680328916e6b7cc2f885faeeded017e Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 23 Sep 2024 05:14:25 -0400 Subject: [PATCH 145/217] Add Training format --- Courses/Patterns-2024.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Courses/Patterns-2024.md b/Courses/Patterns-2024.md index af9a8b1..c205aba 100644 --- a/Courses/Patterns-2024.md +++ b/Courses/Patterns-2024.md @@ -26,6 +26,28 @@ Here's what I suggest learning and practicing: * 🧩 Contract Programming and Modeling with Schemas * 🏛️ Clean Architecture and Layered Architecture +## Tariff plans + +* Minimal: learning in a common group without a mentor but with interactive calls +* Standard: training with mentor in small groups (up to 10 people) +* Professional: training with mentor, 1-on-1, groups, and additional materials +* Exclusive: personalized training track with a couse author + +## Training format + +- 🗓️ 12 weeks (3 months) + onboarding (1 week) + secret module +- 👍 You will get access to course materials forever +- 🕑 Every week (mandatory): 1 hour of lectures + 2 hours of calls + 2 hours of independent work +- 🥋 Training and group work with mentors, not just watching videos and reading +- 🙋‍♂️ Optional: for deep dive +3 hours of additional materials on senior plans +- 🏅 You receive a certificate upon completion of the course +- ⚠️ Requirements: basic JavaScript + practical programming experience is recommended +- 🙅 Not for: beginners, look for free materials for beginners at Timur's Youtube and Github +- 💳 Payment plan: full payment or monthly payment for all plans except minimum +- 🗺️ After the course, participation in the community (thousands of people around the world) + +[👉 Buy: https://nodeua.com/Patterns-2024-buy.html](https://nodeua.com/Patterns-2024-buy.html) + ## 📖 Course Structure ### 📦 Unit 1: Structure and Modularity From 77f563893a4bc64cc5cc09053353c1bfd2e1472e Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 23 Sep 2024 05:14:33 -0400 Subject: [PATCH 146/217] Add Training format --- Courses/Patterns-2024-ua.md | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/Courses/Patterns-2024-ua.md b/Courses/Patterns-2024-ua.md index b3e211f..ada7b98 100644 --- a/Courses/Patterns-2024-ua.md +++ b/Courses/Patterns-2024-ua.md @@ -26,6 +26,28 @@ * 🧩 Контрактне програмування та декларативне моделювання через схеми * 🏛️ Чиста архітектура (Clean) та лукова архітектура (Onion або Layered) +## Тарифні плани + +* Minimal: навчання у загальній групі без наставника, але з груповими семінарами +* Standard: навчання з наставником у невеликих групах (10 осіб) +* Professional: навчання з наставником, індивідуально та в групах, додаткові матеріали +* Exclusive: персоналізований навчальний трек з автором курсу та запрошеними експертами + +## Формат тренінгу + +- 🗓️ 12 тижнів (3 місяці) + онбординг (1 тиждень) + секретний модуль +- 👍 Доступ до матеріалів курсу надається назавжди +- 🕑 Щотижня обов'язково: 1 година лекцій + 2 години семінар + 2 години самостійної роботи +- 🥋 Тренування та групова робота з наставниками, а не тільки перегляд видосів та читання +- 🙋‍♂️ За бажанням: для глибокого занурення +3 години додаткових матеріалів на старших тарифах +- 🏅 По завершенню курсу Ви отримуєте сертифікат +- ⚠️ Вхідні вимоги: базовий JavaScript + рекомендується досвід практичного програмування +- 🙅 Для кого не підійде: не для початківців, безкоштовні матеріали для початківців шукайте у Тимура +- 💳 Розстрочка: помісячна оплата для всіх тарифів, окрім мінімального +- 🗺️ Після курсу участь у ком'юніті випускників, де вже тисячі людей по всьому світу + +[👉 Придбати: https://nodeua.com/Patterns-2024-buy.html](https://nodeua.com/Patterns-2024-buy.html) + ## 📖 Структура курсу ### 📦 Unit 1: Structure and Modularity @@ -116,4 +138,3 @@ * Exclusive: персоналізований навчальний трек з автором курсу та запрошеними експертами [👉 Придбати: https://nodeua.com/Patterns-2024-buy.html](https://nodeua.com/Patterns-2024-buy.html) - From 51f21c51af8f9ccf619679cad5a86f81ab65fc7a Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 23 Sep 2024 05:14:40 -0400 Subject: [PATCH 147/217] Add Training format --- Courses/Patterns-2024-ru.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Courses/Patterns-2024-ru.md b/Courses/Patterns-2024-ru.md index 437b827..2e1a684 100644 --- a/Courses/Patterns-2024-ru.md +++ b/Courses/Patterns-2024-ru.md @@ -26,6 +26,28 @@ * 🧩 Контрактное программирование и декларативное моделирование через схемы * 🏛️ Чистая архитектура (Clean) и слоеная архитектура (Onion или Layered) +## Тарифные планы + +* Minimal: обучение в общей группе без наставника, но с групповыми семинарами +* Standard: обучение с наставником в небольших группах (10 человек) +* Professional: обучение с наставником, индивидуально и в группах, дополнительные материалы +* Exclusive: персонализированный учебный трек с автором курса и приглашенными экспертами + +## Формат тренинга + +- 🗓️ 12 недель (3 месяца) + онбординг (1 неделя) + секретный модуль +- 👍 Доступ к материалам курса дается навсегда +- 🕑 Каждую неделю обязательно: 1 час лекций + 2 часа семинаров + 2 часа самостоятельной работы +- 🥋 Тренировки и групповая работа с наставниками, а не только смотрение видосов и чтение +- 🙋‍♂️ По желанию: для глубокого погружения +3 часа дополнительных материалов на старших тарифах +- 🏅 По завершению курса Вы получаете сертификат +- ⚠️ Входные требования: базовый JavaScript + рекомендуется опыт практического программирования +- 🙅 Для кого не подойдет: не для начинающих, бесплатные материалы для начинающих ищите у Тимура +- 💳 Рассрочка: помесячная оплата для всех тарифов кроме минимального +- 🗺️ После курса участие в комьюнити выпускников, где уже тысячи людей по всему миру + +[👉 Купить: https://nodeua.com/Patterns-2024-buy.html](https://nodeua.com/Patterns-2024-buy.html) + ## 📖 Структура курса ### 📦 Unit 1: Structure and Modularity From f59da550c5178046653450a8c1cc14985c09f148 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 23 Sep 2024 06:27:19 -0400 Subject: [PATCH 148/217] Update Patterns-2024-ua.md --- Courses/Patterns-2024-ua.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Courses/Patterns-2024-ua.md b/Courses/Patterns-2024-ua.md index ada7b98..2dc91b9 100644 --- a/Courses/Patterns-2024-ua.md +++ b/Courses/Patterns-2024-ua.md @@ -6,6 +6,8 @@ Практичний тренінг з переосмислення та застосування патернів GoF, SOLID та GRASP в асинхронному програмуванні на JavaScript та Type для прикладних та системних розробників бекенду та фронтенду, з прикладами для Node.js та браузерних додатків. +***Next onboarding will start 1 October 2024*** + Розуміння цих концепцій не можна просто витягти з коробки (або книги) і помістити собі у голову. Таке розуміння сильно відрізняється для різних мов та платформ. Сліпе перенесення знань і практик з C++ або Java в **JavaScript** та C# призводить до мертвих церемоній. Однак їх можна відродити за допомогою практики, прив'язати до реалій та переосмислити, щоб вони не стали марними монстрами. @@ -41,6 +43,7 @@ - 🥋 Тренування та групова робота з наставниками, а не тільки перегляд видосів та читання - 🙋‍♂️ За бажанням: для глибокого занурення +3 години додаткових матеріалів на старших тарифах - 🏅 По завершенню курсу Ви отримуєте сертифікат +- 💬 Робочі мови: руська - лекцій; українська, англійська, руська, турецька - семінари та наставники - ⚠️ Вхідні вимоги: базовий JavaScript + рекомендується досвід практичного програмування - 🙅 Для кого не підійде: не для початківців, безкоштовні матеріали для початківців шукайте у Тимура - 💳 Розстрочка: помісячна оплата для всіх тарифів, окрім мінімального From fa6a4b81edfc9062411574783f8020b3f851a923 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 23 Sep 2024 06:29:15 -0400 Subject: [PATCH 149/217] Update Patterns-2024-ru.md --- Courses/Patterns-2024-ru.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Courses/Patterns-2024-ru.md b/Courses/Patterns-2024-ru.md index 2e1a684..bddab44 100644 --- a/Courses/Patterns-2024-ru.md +++ b/Courses/Patterns-2024-ru.md @@ -6,6 +6,8 @@ Практический тренинг по переосмыслению и применению паттернов GoF, SOLID и GRASP в асинхронном программировании на JavaScript и Type для прикладных и системных разработчиков бекенда и фронтенда, с примерами для Node.js и браузерных приложений. +***Следующий онбординг будет 1 октября 2024*** + Понимание этих концепций нельзя просто извлечь из коробки (или книги) и поместить себе в голову. Такое понимание сильно различается для разных языков и платформ. Слепой перенос знаний и практик из C++ или Java в **JavaScript** и C# приводит к мертвым церемониям. Однако их можно возродить с помощью практики, привязать к реалиям и переосмыслить, чтобы они не стали бесполезными монстрами. @@ -41,6 +43,7 @@ - 🥋 Тренировки и групповая работа с наставниками, а не только смотрение видосов и чтение - 🙋‍♂️ По желанию: для глубокого погружения +3 часа дополнительных материалов на старших тарифах - 🏅 По завершению курса Вы получаете сертификат +- 💬 Рабочие языки: русский - лекции; украинский, английский, русский, турецкий - семинары и наставники - ⚠️ Входные требования: базовый JavaScript + рекомендуется опыт практического программирования - 🙅 Для кого не подойдет: не для начинающих, бесплатные материалы для начинающих ищите у Тимура - 💳 Рассрочка: помесячная оплата для всех тарифов кроме минимального From 20e5aa5f57266c90565bfec5b431b5c8b38f81c8 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 23 Sep 2024 06:30:47 -0400 Subject: [PATCH 150/217] Update Patterns-2024-ua.md --- Courses/Patterns-2024-ua.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/Patterns-2024-ua.md b/Courses/Patterns-2024-ua.md index 2dc91b9..6c8e82e 100644 --- a/Courses/Patterns-2024-ua.md +++ b/Courses/Patterns-2024-ua.md @@ -6,7 +6,7 @@ Практичний тренінг з переосмислення та застосування патернів GoF, SOLID та GRASP в асинхронному програмуванні на JavaScript та Type для прикладних та системних розробників бекенду та фронтенду, з прикладами для Node.js та браузерних додатків. -***Next onboarding will start 1 October 2024*** +***Наступний онбординг розпочнеться 1 жовтня 2024 року*** Розуміння цих концепцій не можна просто витягти з коробки (або книги) і помістити собі у голову. Таке розуміння сильно відрізняється для різних мов та платформ. Сліпе перенесення знань і практик з C++ або Java в **JavaScript** та C# призводить до мертвих церемоній. From ee7aa75111ba92688f840d1563c889ac40b34e83 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 23 Sep 2024 06:30:52 -0400 Subject: [PATCH 151/217] Update Patterns-2024.md --- Courses/Patterns-2024.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Courses/Patterns-2024.md b/Courses/Patterns-2024.md index c205aba..f6658c8 100644 --- a/Courses/Patterns-2024.md +++ b/Courses/Patterns-2024.md @@ -6,6 +6,8 @@ Practical training for rethinking and applying **GRASP**, **SOLID**, **GoF** patterns in asynchronous programming and JavaScript for application and system developers, backend and frontend, Node.js and browser applications. +***Next onboarding will start 1 October 2024*** + Understanding these concepts can't just be extracted from a box (or book) and placed into your maind. It varies greatly for different languages and platforms. Blindly transferring knowledge and practices from C++ or Java to **JavaScript** and C# results in dead ceremonies. However, they can be revived through practice, tied to realities, and rethought to avoid becoming monstrous and horrors. @@ -41,6 +43,7 @@ Here's what I suggest learning and practicing: - 🥋 Training and group work with mentors, not just watching videos and reading - 🙋‍♂️ Optional: for deep dive +3 hours of additional materials on senior plans - 🏅 You receive a certificate upon completion of the course +- 💬 Languages: RU for lectures; UA, TR, EN, RU for seminars, mentorship and Q&A sessions - ⚠️ Requirements: basic JavaScript + practical programming experience is recommended - 🙅 Not for: beginners, look for free materials for beginners at Timur's Youtube and Github - 💳 Payment plan: full payment or monthly payment for all plans except minimum From 86dfeb0c18cb713fff0b54f53902f59ffd09de3a Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 23 Sep 2024 06:31:23 -0400 Subject: [PATCH 152/217] Update Patterns-2024.md --- Courses/Patterns-2024.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/Patterns-2024.md b/Courses/Patterns-2024.md index f6658c8..e826c7a 100644 --- a/Courses/Patterns-2024.md +++ b/Courses/Patterns-2024.md @@ -6,7 +6,7 @@ Practical training for rethinking and applying **GRASP**, **SOLID**, **GoF** patterns in asynchronous programming and JavaScript for application and system developers, backend and frontend, Node.js and browser applications. -***Next onboarding will start 1 October 2024*** +***🗓️ Next onboarding will start 1 October 2024*** Understanding these concepts can't just be extracted from a box (or book) and placed into your maind. It varies greatly for different languages and platforms. Blindly transferring knowledge and practices from C++ or Java to **JavaScript** and C# results in dead ceremonies. From fdf7af10885318c278fa58694288b1fa8bf22d6e Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 23 Sep 2024 06:31:39 -0400 Subject: [PATCH 153/217] Update Patterns-2024-ua.md --- Courses/Patterns-2024-ua.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/Patterns-2024-ua.md b/Courses/Patterns-2024-ua.md index 6c8e82e..861af78 100644 --- a/Courses/Patterns-2024-ua.md +++ b/Courses/Patterns-2024-ua.md @@ -6,7 +6,7 @@ Практичний тренінг з переосмислення та застосування патернів GoF, SOLID та GRASP в асинхронному програмуванні на JavaScript та Type для прикладних та системних розробників бекенду та фронтенду, з прикладами для Node.js та браузерних додатків. -***Наступний онбординг розпочнеться 1 жовтня 2024 року*** +***🗓️ Наступний онбординг розпочнеться 1 жовтня 2024 року*** Розуміння цих концепцій не можна просто витягти з коробки (або книги) і помістити собі у голову. Таке розуміння сильно відрізняється для різних мов та платформ. Сліпе перенесення знань і практик з C++ або Java в **JavaScript** та C# призводить до мертвих церемоній. From e01a002f1c0597bd146f4ec185fd91a56a65d928 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 23 Sep 2024 06:31:49 -0400 Subject: [PATCH 154/217] Update Patterns-2024-ru.md --- Courses/Patterns-2024-ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/Patterns-2024-ru.md b/Courses/Patterns-2024-ru.md index bddab44..d670111 100644 --- a/Courses/Patterns-2024-ru.md +++ b/Courses/Patterns-2024-ru.md @@ -6,7 +6,7 @@ Практический тренинг по переосмыслению и применению паттернов GoF, SOLID и GRASP в асинхронном программировании на JavaScript и Type для прикладных и системных разработчиков бекенда и фронтенда, с примерами для Node.js и браузерных приложений. -***Следующий онбординг будет 1 октября 2024*** +***🗓️ Следующий онбординг будет 1 октября 2024*** Понимание этих концепций нельзя просто извлечь из коробки (или книги) и поместить себе в голову. Такое понимание сильно различается для разных языков и платформ. Слепой перенос знаний и практик из C++ или Java в **JavaScript** и C# приводит к мертвым церемониям. From 5f7b34eb642e8aa10058d2f8fe30bbdd0153e67f Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 25 Sep 2024 08:11:16 -0400 Subject: [PATCH 155/217] Create Metarhia-Club.md --- Courses/Metarhia-Club.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 Courses/Metarhia-Club.md diff --git a/Courses/Metarhia-Club.md b/Courses/Metarhia-Club.md new file mode 100644 index 0000000..3fbcce0 --- /dev/null +++ b/Courses/Metarhia-Club.md @@ -0,0 +1,7 @@ +# Metarhia Club + +- ⭐ Community calls (2 hours call, 1 per week) +- ⭐ Recordings (over 170 videos) +- ⭐ Telegram group for alumnis (over 700 videos) + +[💳 Buy annual membership](https://www.paypal.com/ncp/payment/YUJ56VENW6LJG) From aeea3efbc27d4b8e30746ebd5b17f79795a7511e Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 25 Sep 2024 08:13:24 -0400 Subject: [PATCH 156/217] Update Metarhia-Club.md --- Courses/Metarhia-Club.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/Metarhia-Club.md b/Courses/Metarhia-Club.md index 3fbcce0..c25f1a5 100644 --- a/Courses/Metarhia-Club.md +++ b/Courses/Metarhia-Club.md @@ -2,6 +2,6 @@ - ⭐ Community calls (2 hours call, 1 per week) - ⭐ Recordings (over 170 videos) -- ⭐ Telegram group for alumnis (over 700 videos) +- ⭐ Telegram group for alumnis (over 700 specialists) [💳 Buy annual membership](https://www.paypal.com/ncp/payment/YUJ56VENW6LJG) From ce2f8f0565cca9aaf471a96bdaef0524e8195794 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 12 Oct 2024 12:39:13 -0400 Subject: [PATCH 157/217] Update Talks.md --- Courses/Talks.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index c7d6a7c..9e0ece0 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -8,6 +8,7 @@ - [Паттерны в JavaScript с примерами и культура кода на ITBeard](https://www.youtube.com/live/vDOe1v76w5Y) - [Об оптимизации паттернов для JavaScript с Деми Мурычем](https://www.youtube.com/watch?v=LJJpbFcmKQs) - [Беседа с Ильей Климовым о целях паттернов](https://youtube.com/live/Jru7q-OjWX8) +- [🧩 Паттерны и оверинжиниринг: баланс между портянкой и церемониями // Немчинский, Шемсединов](https://youtube.com/live/vTMf21FG6wg) ## 2023 From f270719d0ee5c80b6dd9ed25079315c4088f000f Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 17 Oct 2024 07:02:52 -0400 Subject: [PATCH 158/217] Add practical tasks --- Courses/Fundamentals-2024.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/Courses/Fundamentals-2024.md b/Courses/Fundamentals-2024.md index a0b12f8..83c6cdb 100644 --- a/Courses/Fundamentals-2024.md +++ b/Courses/Fundamentals-2024.md @@ -1,7 +1,7 @@ # Основи програмування - Автор: https://github.com/tshemsedinov -- Завдання з курсу: готується для публікації +- [Практичні завдання](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Fundamentals-2024.md#практичні-завдання) - Словник термінів: готується для публікації - Умовні позначення: - ⭐ - Нові спрощені лекції @@ -138,3 +138,21 @@ - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/TypedArrays - 🧩 [Нове у JavaScript](https://youtu.be/fUjHLj8bq_Y) - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/ESNext + +## Практичні завдання + +Запис семінарів про виконання та перевірку лабораторних робіт: +- [Семінар: автоматична перевірка лабораторних робіт](https://youtu.be/M4KpG0LEAyA) +- [Семінар: виконання лабораторних робіт з курсу "Основи програмування"](https://youtu.be/ikUOyFPzdJw) + +Репозитории с задачами: + +0. [Налаштування середовища](https://github.com/HowProgrammingWorks/Introduction) +1. [Змінні та типи даних](https://github.com/HowProgrammingWorks/DataTypes) +2. [Базовий синтаксис JavaScript](https://github.com/HowProgrammingWorks/Reusable) +3. [Функції та методи](https://github.com/HowProgrammingWorks/Function) +4. [Цикли та ітерування](https://github.com/HowProgrammingWorks/Iteration) +5. [Closures та чеїнінг](https://github.com/HowProgrammingWorks/Closure) +6. [Композиція функцій](https://github.com/HowProgrammingWorks/Composition) +7. [Робота з масивами](https://github.com/HowProgrammingWorks/Arrays) +8. [Функції вищого порядку](https://github.com/HowProgrammingWorks/HigherOrderFunction) From 647e0f5dae1e2ca90cb931dfe24034d36f3ae1b2 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Fri, 25 Oct 2024 16:14:11 -0400 Subject: [PATCH 159/217] Update Talks.md --- Courses/Talks.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Courses/Talks.md b/Courses/Talks.md index 9e0ece0..9312969 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -4,11 +4,12 @@ - [Все ли плохо с Diia](https://youtu.be/6X6MaXoQdw8) - [👏 Дія відкрила код - Diia code review 🤦](https://youtu.be/ggIk83GO25I) -- [Дія» открыла код! Что не так?](https://www.youtube.com/watch?v=Ug-tytIlhU0) +- [«Дія» открыла код! Что не так?](https://www.youtube.com/watch?v=Ug-tytIlhU0) - [Паттерны в JavaScript с примерами и культура кода на ITBeard](https://www.youtube.com/live/vDOe1v76w5Y) - [Об оптимизации паттернов для JavaScript с Деми Мурычем](https://www.youtube.com/watch?v=LJJpbFcmKQs) - [Беседа с Ильей Климовым о целях паттернов](https://youtube.com/live/Jru7q-OjWX8) - [🧩 Паттерны и оверинжиниринг: баланс между портянкой и церемониями // Немчинский, Шемсединов](https://youtube.com/live/vTMf21FG6wg) +- [О наставничестве и открытом коде с Денисом Отришко](https://youtu.be/sm9FVEa9P9Y) ## 2023 From f759e30dafa43d844f2596f029364b3131098daf Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 31 Oct 2024 05:59:54 -0400 Subject: [PATCH 160/217] Fix some translation issues --- Courses/Fundamentals-2024.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Courses/Fundamentals-2024.md b/Courses/Fundamentals-2024.md index 83c6cdb..92262f4 100644 --- a/Courses/Fundamentals-2024.md +++ b/Courses/Fundamentals-2024.md @@ -21,8 +21,8 @@ - 🧩 [Введення у програмування, продовження](https://youtu.be/PzlLXQ3RaDs) - 🧩 [Мови програмування](https://youtu.be/enHA1CRkJe0) - 🧩 Семінар: [JavaScript, відповіді на запитання](https://youtu.be/wqkQ6eslyzY) - - 🧩 [История развития языков программирования](https://youtu.be/qqz0VSaNxuw) - - 🧩 [Парадигмы программирования](https://youtu.be/Yk1sxLVHfjs) + - 🧩 [Історія розвитку мов програмування](https://youtu.be/qqz0VSaNxuw) + - 🧩 [Парадигми програмування](https://youtu.be/Yk1sxLVHfjs) - ✨ [Базовий синтаксис JavaScript](https://youtu.be/xJn3k1f4BiM) - ✨ [Базовий синтаксис JavaScript, продовження](https://youtu.be/qa-XleqA0JU) - 🧩 Семінар: [Базовий синтаксис мови JavaScript](https://youtu.be/PGqjTXQe_qw) @@ -48,11 +48,11 @@ - ⭐ [Колекції — Array, Object](https://youtu.be/SqGoKGOZu40) - 🧑‍💻 Масиви: https://github.com/HowProgrammingWorks/Arrays - ✨ [Масиви, об'єкти, класи, прототипи JavaScript](https://youtu.be/VBMGnAPfmsY) - - ✨ [Массивы в JavaScript, методы Array](https://youtu.be/D1kfYBkX9FE) + - ✨ [Масиви у JavaScript, методи Array](https://youtu.be/D1kfYBkX9FE) - 🧑‍💻 Структури даних: https://github.com/HowProgrammingWorks/DataStructures - ⭐ [Домішки (mixin), JSON серіалізація (serialization)](https://youtu.be/rMUB78bs26w) - ⭐ [Множини (Set) та хеш-таблиці (Map)](https://youtu.be/1avvpS_Hqms) - - ✨ [Коллекции, множества, хеш таблицы в JavaScript](https://youtu.be/hN0wsq5LNOc) + - ✨ [Коллекції, множини, хеш таблиці у JavaScript](https://youtu.be/hN0wsq5LNOc) - 🧑‍💻 Колекції: https://github.com/HowProgrammingWorks/Collections - 🧑‍💻 Хеш таблиці: https://github.com/HowProgrammingWorks/Map - 🧑‍💻 Множини (Set): https://github.com/HowProgrammingWorks/Set @@ -62,13 +62,13 @@ - ✨ Старий семінар: [Автоматична перевірка лабораторних робіт](https://youtu.be/M4KpG0LEAyA) - ✨ Семінар: [Виконання лабораторних робіт з курсу](https://youtu.be/ikUOyFPzdJw) - 🧑‍💻 Підготовка середовища виконання завдань: [Exercises.ru.md](https://github.com/HowProgrammingWorks/Introduction/blob/master/Exercises.ru.md) - - 🧑‍💻 Завдання: [SEF1.ru.md](https://github.com/HowProgrammingWorks/Index/blob/master/Practice/SEF1.ru.md) + - 🧑‍💻 [Практичні завдання](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Fundamentals-2024.md#практичні-завдання) - Callbacks, timers - ⭐ [Функції зворотнього виклику (callbacks) та таймери](https://youtu.be/MFG3NaEwu70) - 🧑‍💻 Функції зворотнього виклику: https://github.com/HowProgrammingWorks/Callbacks - ✨ [Функції вищого порядку, колбеки, події](https://youtu.be/1vqATwbGHnc) - 🧑‍💻 Функції вищого порядку: https://github.com/HowProgrammingWorks/HigherOrderFunction - - ✨ [Таймеры, таймауты и EventEmitter](https://youtu.be/LK2jveAnRNg) + - ✨ [Таймери, таймаути та EventEmitter](https://youtu.be/LK2jveAnRNg) - 🧑‍💻 Таймери: https://github.com/HowProgrammingWorks/Timers - 🧑‍💻 EventEmitter: https://github.com/HowProgrammingWorks/EventEmitter - 🧑‍💻 Події: https://github.com/metarhia/common/blob/master/lib/events.js @@ -95,28 +95,28 @@ - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Antipatterns/tree/master/JavaScript/01-Common - ✨ [Консоль та командний рядок у JavaScript та Node.js](https://youtu.be/5aSZyKi5BmE) - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/CommandLine -- 🧩 [Чеининг функций и объектов, обработка ошибок](https://youtu.be/PfuEfIiLX34) +- 🧩 [Чеінінг функцій та об'єктів, обробка помилок](https://youtu.be/PfuEfIiLX34) - 🧑‍💻 Чеінінг: https://github.com/HowProgrammingWorks/Chaining - 🧑‍💻 Обробка помилок: https://github.com/HowProgrammingWorks/Errors - ✨ [Антипатерни процедурного програмування](https://youtu.be/cTv7V22mkwE) - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Antipatterns/tree/master/JavaScript/02-Procedural -- ✨ [Code Review: как это и зачем](https://youtu.be/EKL6NiIQ6ZU) +- ✨ [Code Review: як це і навіщо](https://youtu.be/EKL6NiIQ6ZU) - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/CodeReview - - Семинар: [Code Review, ответы на вопросы](https://youtu.be/AgH4OAKbmkM) + - Семінар: [Code Review, відповіді та питання](https://youtu.be/AgH4OAKbmkM) - ✨ [Структури даних: списки, стек, черга, дек](https://youtu.be/9KvA4hDDSjk) - 🧑‍💻 Списки: https://github.com/HowProgrammingWorks/LinkedList - 🧑‍💻 Черги: https://github.com/HowProgrammingWorks/Dequeue - ✨ [Сериализация и десериализация в JavaScript и Node.js](https://youtu.be/GtKPniOEzh8) - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Serialization -- ✨ [Рефакторинг: причины, цели, техники и процесс](https://youtu.be/z73wmpdweQ4) +- ✨ [Рефакторінг: причини, цілі, техніки та процес](https://youtu.be/z73wmpdweQ4) - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Refactoring - - 🧑‍💻 Пример проекта: https://github.com/tshemsedinov/node-mysql-utilities + - 🧑‍💻 Приклад проекту: https://github.com/tshemsedinov/node-mysql-utilities - 🧩 Семінар: [Вибір напряму у програмуванні](https://youtu.be/1gL627DQF4A) - 🧩 [Proxy та Symbol](https://youtu.be/UjZjSDyi9AM) - 🧑‍💻 Проксі: https://github.com/HowProgrammingWorks/Proxy - 🧑‍💻 Символи: https://github.com/HowProgrammingWorks/Symbol - ✨ [Регулярні вирази та парсинг у JavaScript](https://youtu.be/-ef2E0ozxao) - - 🧑‍💻 Примеры кода: https://github.com/HowProgrammingWorks/RegExp + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/RegExp - ✨ [Композиція: pipe, compose](https://youtu.be/xS9FicVrOTI) - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Composition - ✨ [Домішки: mixin, extend, Object.assign, class-mixin](https://youtu.be/NZMrJ2adEyY) From 751e5ef5906ec28455caeaaaf8014aa2388645c2 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 18 Nov 2024 09:43:39 -0500 Subject: [PATCH 161/217] Create Async-2025.md --- Courses/Async-2025.md | 167 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 Courses/Async-2025.md diff --git a/Courses/Async-2025.md b/Courses/Async-2025.md new file mode 100644 index 0000000..9e5515b --- /dev/null +++ b/Courses/Async-2025.md @@ -0,0 +1,167 @@ +# Асинхронное программирование 2025 + +Те способы писать асинхронный код, которые мы использовали 10-15 лет назад безвозвратно уходят в прошлое и могут быть интересны лишь для поддержки легаси упражнения в глубоком понимании асинхронного программирования. Даже способы 5-7 летней давности уже имеют мало общего с современными практиками, но интернет полон устаревшей информации, даже [открытый курс сообщества Metarhia](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md) на сегодняшний момент стал слишком громоздким и излишним. Еще нужно упомянуть о том, что в системном и прикладном коде асинхронное программирование должно выглядеть принципиально по-разному. Полностью скрыть от продуктового разработчика сложность асинхронного кода за абстракциями не удастся, потому, что он в любом случае будет работать с таймерами, событиями, стримами, 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 + - 🧑‍💻 [Задания по колбекам](https://github.com/HowProgrammingWorks/Callbacks/tree/master/JavaScript/Tasks) (решения, ревью и разбор в платном курсе) +- 💯 Минимально необходимое понимание рантайма: event loop, I/O, таймеры + - ⭐ Фазы Event-loop в V8 и Node.js (ссылка в платном курсе) + - 🧩 [Стрим с разбрром Event loop и асинхронности](https://www.youtube.com/live/ND5HNHicACI) + - 💻 Таймеры: https://github.com/HowProgrammingWorks/Timers + - 🧑‍💻 Задания по таймерам (в платном курсе) +- 💯 Контракты на базе событий `EventTarget`, `EventEmitter` + - ⭐ События (ссылка в платном курсе) + - 🧑‍💻 [Задания по событиям](https://github.com/HowProgrammingWorks/Events/tree/main/JavaScript/Tasks) (решения, ревью и разбор в платном курсе) + - ✨ [EventEmitter из старой лекции](https://youtu.be/LK2jveAnRNg) + - 💻 EventEmitter: https://github.com/HowProgrammingWorks/EventEmitter +- 💯 Абстракция потоков `Stream` + - ⭐ Стримы Readable, Writable, Transform, открытый конструктор, буферизация, backpressure (ссылка в платном курсе) + - 🧑‍💻 Задания по стримам (в платном курсе) + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Streams/tree/master/JavaScript + - ✨ [Паттерн открытый конструктор (Revealing Constructor)](https://youtu.be/leR5sXRkuJI) + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/RevealingConstructor +- ⚙️ Контракт `Thenable` + - ⭐ Контракт `Thenabe` (ссылка в платном курсе) + - ✨ [Thenable из старой лекции](https://youtu.be/Jdf_tZuJbHI) + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Thenable + - 🧑‍💻 [Задания по `Thenabe`Thenable](https://github.com/HowProgrammingWorks/Thenable/tree/master/JavaScript/Tasks) (решения, ревью и разбор в платном курсе) +- 💯 Контракт `Promise` + - ⭐ Promise: then/catch/finally и методы класса all, allSettled, race, any (ссылка в платном курсе) + - ✨ [Асинхронность на промисах из старой лекции](https://youtu.be/RMl4r6s1Y8M) + - 💻 [Примеры кода](https://github.com/HowProgrammingWorks/Promise/tree/master/JavaScript) + - 🧑‍💻 [Задания по `Promise`](https://github.com/HowProgrammingWorks/Promise/tree/master/JavaScript/Tasks) (решения, ревью и разбор в платном курсе) +- 💯 Контракт асинхронных функций `async/await` + - ⭐ Асинхронные функции (ссылка в платном курсе) + - ✨ [Асинхронные функции из старой лекции](https://youtu.be/Jdf_tZuJbHI) + - 💻 [Примеры кода](https://github.com/HowProgrammingWorks/AsyncFunction/tree/main/JavaScript) + - 🧑‍💻 [Задания по `async/await`](https://github.com/HowProgrammingWorks/AsyncAwait/tree/master/JavaScript/Tasks) (решения, ревью и разбор в платном курсе) +- 💯 Контракт сигналов `signals` + - ⭐ Сигналы (в платном курсе) + - 💻 Примеры кода: (готовятся), будут тут https://github.com/HowProgrammingWorks/Signals + - 🧑‍💻 Задания по сигналам (в платном курсе) +- 💯 Обработка ошибок, их выявление и решение проблем со стектрейсом + - ✨ [Обработка ошибок из старой лекции](https://youtu.be/Jdf_tZuJbHI) + - 💻 Примеры кода + - 💻 Примеры кода из старого курса: 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://youtu.be/Jj5KZRq4wYI) + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Pool + - 💻 Примеры кода: (готовятся), будут тут https://github.com/HowProgrammingWorks/AsyncPool +- 🧑‍🎓 Асинхронная коллекция `Collector` + - 🧩 Асинхронные коллекции (собираем значения до готовности) + - ✨ [Асинхронные коллекторы данных](https://youtu.be/tgodt1JL6II) + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Collector +- 🧑‍🎓 Паттерн цепочка ответственности `Chain of responsibility` + - 💻 Примеры кода: (готовятся), будут тут https://github.com/HowProgrammingWorks/ChainOfResponsibility +- 🧑‍🎓 Конвертеры контрактов `asyncify`, `callbackify`, стыковка кода в разных стилях + - ⭐ Асинхронные адаптеры (в платном курсе) + - ✨ [Асинхронные адаптеры из старой лекции](https://youtu.be/76k6_YkYRmU) + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/AsyncAdapter + - 🧑‍💻 Задания по адаптерам (в платном курсе) +- 🧑‍🎓 Предотвращение состояния гонки по данным и управлению в асинхронном коде (в платном курсе) +- 🧑‍🎓 Отмена асинхронных операций: `AbortController`, `AbortSignal` (в платном курсе) + - 🧩 Документация на MDN: https://developer.mozilla.org/en-US/docs/Web/API/AbortController +- 🧑‍🎓 `Async Generator` и `Async Iterator` (в платном курсе) + - ✨ [Генераторы и асинхронные генераторы из старой лекции](https://youtu.be/kvNm9D32s8s) +- ⚙️ Абстракции портированные из параллельного программирования в асинхронное + - 🧩 Асинхронные абстракции: `Semaphore`, `Mutex` + - 🧩 Блокировки `Lock`, `Spin Lock` +- ⚙️ Абстракции параллельного программирования + - 🧩 Системные абстракции: `threads`, `processes` + - 🧩 Межпроцессовое и межпотоковое взаимодействие, `MessageChannel`, `BroadcastChannel` + - 🧩 Корутины `coroutines` +- 🧑‍🎓 Асинхронные генераторы и асинхронные итераторы + - ✨ [Генераторы и асинхронные генераторы из старой лекции](https://youtu.be/kvNm9D32s8s) + - 💻 Генераторы: https://github.com/HowProgrammingWorks/Generator + - 💻 Асинхронные генераторы: https://github.com/HowProgrammingWorks/AsyncGenerator + - ✨ [Итераторы и асинхронные итераторы из старой лекции](https://youtu.be/rBGFlWpVpGs) + - 💻 Итераторы: https://github.com/HowProgrammingWorks/Iterator + - 💻 Асинхронные итераторы: https://github.com/HowProgrammingWorks/AsyncIterator +- 🧑‍🚀 Композиция функций на колбеках `compose callbacks` + - ✨ [Асинхронная композиция функций](https://youtu.be/3ZCrMlMpOrM) + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/AsyncCompose +- 🧑‍🚀 Композиция асинхронных функций `async compose` + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/AsyncCompose +- 🧑‍🚀 Асинхронность на потоках событий `RxJS` + - ✨ Потоки событий, паттерн `Observer/Observable` + - ✨ [Асинхронность на RxJS из старой лекции](https://youtu.be/0kcpMAl-wfE) + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Rx +- 🧑‍🚀 Модель акторов `actor model` + - ✨ [Модель акторов](https://youtu.be/xp5MVKEqxY4) + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/ActorModel +- 🧑‍🚀 Библиотека `do`: https://www.npmjs.com/package/do +- 🧑‍🚀 Функциональное асинхронное программирование, контракт `Future` + - ✨ [Асинхронность на фьючерах без состояния](https://youtu.be/22ONv3AGXdk) + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Future +- ⚠️ Асинхронность на синхронных генераторах `function*/yield` +- ⚠️ Мидлвары `middleware` как антипаттерн: https://youtu.be/RS8x73z4csI + - 💻 Примеры кода: (готовятся), будут тут https://github.com/HowProgrammingWorks/Middleware +- ⚠️ Контракты семейства `Deferred` + - ✨ [Deferred: Асинхронность на диферах с состоянием](https://youtu.be/a2fVA1o-ovM) + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Deferred +- ⚠️ Async.js + - 🧩 [Легаси код на библиотеке `Async.js`](https://youtu.be/XQ94wQc-erU) + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/AsynchronousProgramming +- ⚠️ Коллекция асинхронных абстракций `Metasync`: https://www.npmjs.com/package/metasync + - ✨ [Архивная лекция](https://youtu.be/xNfOv9I1MDk) +- ⚙️ Трекинг асинхронных контекстов + - ⭐ AsyncLocalStorage, AsyncResource (в платном курсе) + - 💻 Примеры использования AsyncLocalStorage и AsyncResource: https://github.com/HowProgrammingWorks/AsyncContextTracking +- ⚙️ Процессы и потоки + - 🧩 [Многопоточность в Node.js](https://youtu.be/VNXga8zomrY) + - 🧩 [Web Locks API in Node.js and browser](https://youtu.be/auMM-uV12F0) + +## Обратите внимание + +Что нужно знать и уметь на входе: + +- 🔗 [Синтаксис JavaScript без всяких триков](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Fundamentals.md) +- 💡 Уверенно владеть git, иметь github аккаунт +- 💡 Любая среда разработки, IDE или редактор + +Чем это курс не является: это не чтение документации, не курс по библиотекам и фреймворкам, не повторение старого курса, не лайвкодинг и не мастеркласс, не стрим. Новый курс - это максимально сконцентрированная информация и практические задачи как для прикладного, так и для системного программирования со сравнением этих подходов. + +## Как попасть на курс + +🎫 Регистрация: следите за публикациями чтобы не пропустить начало регистрации. + +👉 Новости курса будут в канале: https://t.me/asyncify +👉 Открытая группа курса: https://t.me/asynctalks +👉 Подписывайтесь на https://t.me/metarhia и https://www.youtube.com/@TimurShemsedinov чтобы следить за новостями From 2fa340c5312b8f5a5fcf55b7b97a79c395a4c4f8 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 18 Nov 2024 16:55:01 -0500 Subject: [PATCH 162/217] Create NodeJS-2025.md --- Courses/NodeJS-2025.md | 125 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 Courses/NodeJS-2025.md diff --git a/Courses/NodeJS-2025.md b/Courses/NodeJS-2025.md new file mode 100644 index 0000000..87a3725 --- /dev/null +++ b/Courses/NodeJS-2025.md @@ -0,0 +1,125 @@ +# Технологический стек Node.js в 2025 + +Что нужно знать на входе: +- 🔗 [Синтаксис JavaScript без всяких триков](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Fundamentals.md) +- 🔗 [Основы асинхронного программирования](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md) +- 💡 Уверенно владеть git, иметь github аккаунт +- 💡 Желательно docker, иметь рабочую машину на linux или mac +- 💡 Любая среда разработки, IDE или редактор + +Ссылки на старый курс: +- 🔗 [Структура со ссылками на видео и репозитории с примерами кода](NodeJS.md) +- 🔗 [Для части лекций есть таймкоды и подробное оглавление](NodeJS-timecodes.md) + +Чем этот курс не является: это не чтение документации, не курс по фреймворкам, не курс по Metarhia, не повторение старого курса, не лайвкодинг и не мастеркласс, не стрим. Новый курс - это максимально сконцентрированная информация и практические задачи по разработке на чистой ноде но с хорошей архитектурой и использованием всех современных возможностей Node.js + +👉 Patreon: https://www.patreon.com/tshemsedinov +👉 Видео обзор курса: https://youtu.be/moH8df67zAM +👉 Вопросы на интервью: https://github.com/tshemsedinov/NodeJS-Interview-Questions + +## Содержание + +- ⭐ [Введение в технологию 🚀](https://youtu.be/mRvzgBGLVyM) + - 🧑‍💻 [HTTP сервер для статики](https://github.com/HowProgrammingWorks/NodeServer/tree/master/native-2022) + - 🔗 [Таблица поддержки возможностей в версиях ноды](https://node.green/) + - 🔗 [Автоматизация проверки безопасности кода](https://snyk.io/) + - 🔗 [Встроенный в npm аудит безопасности](https://docs.npmjs.com/cli/v8/commands/npm-audit) + - 🧩 [Сравнение кластеризации HTTP, TCP и UDP на процессах и потоках](https://youtu.be/dum4b4EZktY) + - 🧩 [Стрим про асинхронность и фазы ивентлупа](https://youtu.be/ND5HNHicACI) +- ⭐ Структура приложений: системы модульности, пакеты и зависимости + - 💻 [Системы модульности, CommonJS, ESModules, реализация своей системы модульности](https://github.com/HowProgrammingWorks/Modularity) + - 💻 [Пакеты и их загрузка в разных системах модульности](https://github.com/HowProgrammingWorks/Packages) +- ⭐ Архитектура приложений: слои и внедрение зависимостей + - 💻 [Пошаговый рефакторинг от мидлварей до слоеной архитектуры](https://github.com/HowProgrammingWorks/DDD) + - 🧩 [Почему мидлвари это плохо](https://youtu.be/RS8x73z4csI) +- ⭐ Layers and Low Coupling на примере конфига и транспорта + - 💻 [Примеры кода "A", "B" и "C" к лекции](https://github.com/HowProgrammingWorks/DDD) +- ⭐ Базы данных, модель, заголовки .d.ts и линтеры +- ⭐ Криптография: crypto, хеширование паролей с солью, session token, UUID, случайные числа + - 💻 Реализация `randomPrefetcher` из библиотеки `metautil`: https://github.com/metarhia/metautil/blob/v3.7.0/lib/crypto.js + - 💻 Упрощенное хеширование: https://github.com/HowProgrammingWorks/DDD/blob/master/JavaScript/d-messenger/lib/common.js + - 💻 Полноценное хеширование: https://github.com/metatech-university/NodeJS-Pure/blob/main/lib/common.js + - 💻 Генерация UUID: https://nodejs.org/api/crypto.html#cryptorandomuuidoptions + - 🔗 Документация по `node:crypto`: https://nodejs.org/api/crypto.html +- ⭐ [Применение Chat GPT в оптимизации JavaScript для Node.js](https://youtu.be/Ebrzqj8cGUY) + - 💻 [Chunk encode/decode with typed arrays](https://github.com/HowProgrammingWorks/ChatGPT/tree/main/JavaScript/1-Chunk) + - 💻 [Promise chain and async code optimization](https://github.com/HowProgrammingWorks/ChatGPT/tree/main/JavaScript/2-Promise) + - 💻 [Crypto random prefetcher](https://github.com/HowProgrammingWorks/ChatGPT/tree/main/JavaScript/3-Prefetcher) +- ⭐ Структура классов сервера и GoF паттерны в Node.js +- ⭐ Подсистема `Authentication` +- ⭐ Подсистема `Role Based Access Control` + - Системы прав ACL, ABAC, RBAC, и проектирование нашей системы прав для курса +- ⭐ Стримы Readable, Writable, Transform, открытый конструктор, буферизация, backpressure + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Streams/tree/master/JavaScript +- ⭐ Инфраструктура и инструментарий: тайпинги, тестирование, линтеры, CI/CD, встроенный testing framework +- ⭐ Работа с ошибками и исключениями, `Graceful shutdown` в Node.js, `unhandled exceptions`, `async stack trace` + - 💻 Async stack trace: https://github.com/HowProgrammingWorks/StackTrace/blob/master/JavaScript/6-pass-through.js + - 💻 Graceful shutdown: https://github.com/HowProgrammingWorks/GracefulShutdown +- ⭐ Асинхронное, реактивное и параллельное программирование + - ✨ Обзор асинхронного программирования в Node.js: https://youtu.be/hY6Z6qNYzmc + - 💻 Разные контракты: https://github.com/HowProgrammingWorks/AsynchronousProgramming + - 💻 Таймеры: https://github.com/HowProgrammingWorks/Timers + - 💻 EventEmitter: https://github.com/HowProgrammingWorks/EventEmitter + - 💻 Промисы: https://github.com/HowProgrammingWorks/Promise + - 💻 Async/await: https://github.com/HowProgrammingWorks/AsyncAwait + - 💻 Асинхронные адаптеры: https://github.com/HowProgrammingWorks/AsyncAdapter + - 💻 Асинхронные итераторы: https://github.com/HowProgrammingWorks/AsyncIterator + - 💻 Thenable: https://github.com/HowProgrammingWorks/Thenable + - 💻 Асинхронная очередь: https://github.com/HowProgrammingWorks/ConcurrentQueue + - 💻 Паттерн открытый конструктор (Revealing Constructor): https://github.com/HowProgrammingWorks/RevealingConstructor +- ⭐ Работа с файлами и файловыми потоками, наблюдение за файловой системой + - ✨ Работа с файлами, буферами и файловыми потоками: https://youtu.be/eQGBS15vUac + - 💻 Работа с файлами: https://github.com/HowProgrammingWorks/Files + - 💻 Файловые потоки: https://github.com/HowProgrammingWorks/Streams + - 💻 Буферы: https://github.com/HowProgrammingWorks/Buffers + - 💻 Наблюдение за файлами: https://github.com/HowProgrammingWorks/FilesystemWatch +- ⭐ Принципы `GRASP` и `SOLID` в `JavaScript` с адаптацией для Node.js + - ✨ GRASP принципы с адаптацией для JavaScript и Node.js: https://youtu.be/ExauFjYV_lQ + - 💻 Information Expert: https://github.com/HowProgrammingWorks/InformationExpert + - 💻 Coupling and Cohesion: https://github.com/HowProgrammingWorks/CouplingCohesion + - 💻 Pure Fabrication: https://github.com/HowProgrammingWorks/PureFabrication + - 💻 Single responsibility: https://github.com/HowProgrammingWorks/SingleResponsibility + - 💻 Liskov substitution: https://github.com/HowProgrammingWorks/LiskovSubstitution + - 💻 IoC and DI: https://github.com/HowProgrammingWorks/InversionOfControl +- ⭐ Вопросы безопасности: `DoS`, `XSS`, `Path traversal`, `CSRF`, `SQL`-инъекции + - ✨ Безопасность приложений Node.js: https://youtu.be/Pdfo1G-gI6s + - 🔗 Слайды: https://www.slideshare.net/tshemsedinov/nodejs-security-199004963 +- ⭐ C/C++ Addons, Node-API (n-api), WebAssembly: Rust, WAT, C++, AssemblyScript + - 💻 N-API examples for C++ and Rust: https://github.com/HowProgrammingWorks/Node-API + - 💻 WebAssembly for C++, Rust, WAT, and AssemblyScript https://github.com/HowProgrammingWorks/WebAssembly + - 💻 In-place callback solution: https://github.com/tshemsedinov/wasm-import +- ⭐ Трекинг асинхронных контекстов: AsyncLocalStorage, AsyncResource + - 💻 Примеры использования AsyncLocalStorage и AsyncResource: https://github.com/HowProgrammingWorks/AsyncContextTracking +- ⭐ Проектирование API и проверка контрактов в рантайме + - ✨ Контрактное программирование: https://youtu.be/K5_kSUvbGEQ + - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Contract +- ⭐ Вынесение подсистем как отдельных микросервисов +- ⭐ `Performance hooks`, телеметрия ресурсов и оптимизация: I/O bound, CPU bound, memory bound, профилирование +- ⭐ `Serverless` и облачные `FaaS` решения на базе Node.js + - ✨ Serverless Clouds (FaaS) и изоляция контекстов запросов в Node.js: https://youtu.be/x-Rd6fPV6L8 + - 🔗 Слайды: https://www.slideshare.net/tshemsedinov/serverless-clouds-faas-and-request-context-isolation-in-nodejs +- ⭐ Приложения, приближенные к реальному времени, Websocket, интерактивность и коллаборативные приложения + - 💻 Серверная реализация + - 💻 Клиентская реализация на C++ для Node.js 21 + - 💻 Интерактивность и коллоборативные приложения +- ⭐ Распределенные системы, высоконагруженные системы, балансировка нагрузки, кластеризация и масштабирование, IP sticky + - ✨ Доклад по высоконагруженным системам: https://youtu.be/7tfZDABPvVs + - ✨ HTTP сервер на Node.js (routing, cluster, IP sticky): https://youtu.be/7Ufxj0oTaUo + - 💻 Примеры серверов: https://github.com/HowProgrammingWorks/NodeServer +- ⭐ Изоляция кода и данных в Node.js: `vm`, `v8`, защита `global`, контекстов, модулей и прототипов от патчинга +- ⭐ Структура и архитектура проекта, слои, `DDD`, `Clean architecture`, связанность и связность кода, протекание абстракций +- ⭐ Реализация HTTP Proxy + - 📢 [Разбор примеров кода Timur Sevimli](https://youtu.be/4yF6hlxiIic) + - 💻 Примеры кода из видео: https://github.com/HowProgrammingWorks/ProxyHTTP +- ⭐ Сборка Node.js приложений в single executable +- ⭐ Автоматическая перезагрузка процессов с --watch +- ⭐ Обзор Web API портированнного в Node.js: Web Crypro, Web Streams, Intl +- ⭐ Встроенная система Permissions для ограничения доступа к файловой системе, сети, другим API + +План курса формируется. Тут появится еще много тем в ближайшее время. + +# Доступ + +🎫 Регистрация: Следите за новостями, когда откроется регистрация, на курс можно будет подписаться тут https://www.patreon.com/tshemsedinov + +👉 Подписывайтесь на https://t.me/metarhia и https://www.youtube.com/@TimurShemsedinov чтобы следить за новостями. From 2fd2f3dead64108b5adf219d4c2e81f313734d98 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 21 Dec 2024 12:55:54 -0500 Subject: [PATCH 163/217] Add talks --- Courses/Talks.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index 9312969..bf848bf 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -10,6 +10,9 @@ - [Беседа с Ильей Климовым о целях паттернов](https://youtube.com/live/Jru7q-OjWX8) - [🧩 Паттерны и оверинжиниринг: баланс между портянкой и церемониями // Немчинский, Шемсединов](https://youtube.com/live/vTMf21FG6wg) - [О наставничестве и открытом коде с Денисом Отришко](https://youtu.be/sm9FVEa9P9Y) +- [🎙️ Demi Murych (Деми Мурыч) и Timur Shemsedinov (Тимур Шемсединов) — JavaScript оптимизация и паттерны](https://youtu.be/jj53cCZ0wFg) +- [🎙️ Eugene Yukhno (Евгений Юхно) и Timur Shemsedinov (Тимур Шемсединов) — LISP and JavaScript](https://youtu.be/qg_dwfTb5MQ) +- [🧩 Паттерны и оверинжиниринг: баланс между портянкой и церемониями // Сергей Немчинский и Тимур Шемсединов](https://youtu.be/vTMf21FG6wg) ## 2023 From 7bcc55b28db773c4be96c62e280da94089fb7bf4 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 25 Dec 2024 09:09:26 -0500 Subject: [PATCH 164/217] Reorder --- Courses/Talks.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Courses/Talks.md b/Courses/Talks.md index bf848bf..872cdac 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -2,9 +2,6 @@ ## 2024 -- [Все ли плохо с Diia](https://youtu.be/6X6MaXoQdw8) -- [👏 Дія відкрила код - Diia code review 🤦](https://youtu.be/ggIk83GO25I) -- [«Дія» открыла код! Что не так?](https://www.youtube.com/watch?v=Ug-tytIlhU0) - [Паттерны в JavaScript с примерами и культура кода на ITBeard](https://www.youtube.com/live/vDOe1v76w5Y) - [Об оптимизации паттернов для JavaScript с Деми Мурычем](https://www.youtube.com/watch?v=LJJpbFcmKQs) - [Беседа с Ильей Климовым о целях паттернов](https://youtube.com/live/Jru7q-OjWX8) @@ -13,6 +10,9 @@ - [🎙️ Demi Murych (Деми Мурыч) и Timur Shemsedinov (Тимур Шемсединов) — JavaScript оптимизация и паттерны](https://youtu.be/jj53cCZ0wFg) - [🎙️ Eugene Yukhno (Евгений Юхно) и Timur Shemsedinov (Тимур Шемсединов) — LISP and JavaScript](https://youtu.be/qg_dwfTb5MQ) - [🧩 Паттерны и оверинжиниринг: баланс между портянкой и церемониями // Сергей Немчинский и Тимур Шемсединов](https://youtu.be/vTMf21FG6wg) +- [Все ли плохо с Diia](https://youtu.be/6X6MaXoQdw8) +- [👏 Дія відкрила код - Diia code review 🤦](https://youtu.be/ggIk83GO25I) +- [«Дія» открыла код! Что не так?](https://www.youtube.com/watch?v=Ug-tytIlhU0) ## 2023 From 82655debe1b49804e340694f0d1eb10f963f7613 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 20 Jan 2025 05:40:08 -0500 Subject: [PATCH 165/217] Update Talks.md --- Courses/Talks.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index 872cdac..f716a0f 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -1,5 +1,12 @@ # Conference and public talks +## 2025 + +- [🚀 JavaScript: потоки и процессы, асинхронное и параллельное программирование на Node.js и в браузере](https://youtu.be/lxHudbhgfy0) +- [🎙️ Найм зламаний — Макс Безуглий та Тимур Шемсединов — архітектура, алгоритми, патерни, софтскіли...](https://youtu.be/z2A40MbiQb4) +- [🎙️ Карьера в IT и найм на работу: вакансии, резюме, собеседования, офферы, опыт, интервью, скилы](https://youtu.be/qkj9uJeEPhg\) +- [🧩 JavaScript и TypeScript Patterns Q&A Call #13: Литература, курс, DDD, моделирование, софтскилы](https://youtu.be/4jcB_G_u8BY) + ## 2024 - [Паттерны в JavaScript с примерами и культура кода на ITBeard](https://www.youtube.com/live/vDOe1v76w5Y) @@ -13,6 +20,7 @@ - [Все ли плохо с Diia](https://youtu.be/6X6MaXoQdw8) - [👏 Дія відкрила код - Diia code review 🤦](https://youtu.be/ggIk83GO25I) - [«Дія» открыла код! Что не так?](https://www.youtube.com/watch?v=Ug-tytIlhU0) +- [🎙️ Lowcode/Nocode, AI in JavaScript — Dmytro Nechai — Дмитрий Нечай — Metarhia Community Meetup #182](https://youtu.be/tzZ316WTF2Q) ## 2023 From 97001163caad4609d729115e68706f5466122ddc Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 20 Jan 2025 05:42:44 -0500 Subject: [PATCH 166/217] Update Talks.md --- Courses/Talks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Courses/Talks.md b/Courses/Talks.md index f716a0f..1ec4827 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -4,7 +4,7 @@ - [🚀 JavaScript: потоки и процессы, асинхронное и параллельное программирование на Node.js и в браузере](https://youtu.be/lxHudbhgfy0) - [🎙️ Найм зламаний — Макс Безуглий та Тимур Шемсединов — архітектура, алгоритми, патерни, софтскіли...](https://youtu.be/z2A40MbiQb4) -- [🎙️ Карьера в IT и найм на работу: вакансии, резюме, собеседования, офферы, опыт, интервью, скилы](https://youtu.be/qkj9uJeEPhg\) +- [🎙️ Карьера в IT и найм на работу: вакансии, резюме, собеседования, офферы, опыт, интервью, скилы](https://youtu.be/qkj9uJeEPhg) - [🧩 JavaScript и TypeScript Patterns Q&A Call #13: Литература, курс, DDD, моделирование, софтскилы](https://youtu.be/4jcB_G_u8BY) ## 2024 From 4a618179a9bcbce7071ccd64bdef3c93abde9665 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 10 Feb 2025 17:54:55 -0500 Subject: [PATCH 167/217] Update Patterns.md --- Courses/Patterns.md | 123 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 95 insertions(+), 28 deletions(-) diff --git a/Courses/Patterns.md b/Courses/Patterns.md index 6ec67b1..0bf11e0 100644 --- a/Courses/Patterns.md +++ b/Courses/Patterns.md @@ -1,31 +1,98 @@ -# Шаблоны проектирования +# Patterns for JavaScript and Typescript -[Таймкоды и подробное оглавление для части лекций](Patterns-timecodes.md) +GRASP, SOLID, and GoF patterns for Frontend & Backend modern development -## Видео-лекции +- SOLID + - Single responsibility principle: https://github.com/HowProgrammingWorks/SingleResponsibility + - Open/closed principle: https://github.com/HowProgrammingWorks/OpenClosed + - Liskov substitution principle: https://github.com/HowProgrammingWorks/LiskovSubstitution + - Interface segregation principle: https://github.com/HowProgrammingWorks/InterfaceSegregation + - Dependency inversion principle: https://github.com/HowProgrammingWorks/DependencyInversion +- Instantiation: Creational Patterns and Techniques + - Decomposition, Instantiation, Encapsulation, Aggregation, Composition, Association, Delegation + - Class composition (association, aggregation) + - GRASP: Information expert + - GRASP: Creator + - Abstract factory: https://github.com/HowProgrammingWorks/AbstractFactory + - Builder: https://github.com/HowProgrammingWorks/Builder + - Factory method: https://github.com/HowProgrammingWorks/Factory + - Object pool: https://github.com/HowProgrammingWorks/Pool + - Prototype: https://github.com/HowProgrammingWorks/PrototypePattern + - Do not confuse Prototype with Prototype-programming: https://github.com/HowProgrammingWorks/Prototype + - Singleton: https://github.com/HowProgrammingWorks/Singleton + - Revealing Constructor + - Flyweight: https://github.com/HowProgrammingWorks/Flyweight +- Isolation and Separation of Concerns + - Contracts and Contract programming, Interfaces + - Modularity, Layers and Low Coupling + - GRASP: Low coupling + - GRASP: High cohesion + - GRASP: Controller + - GRASP: Indirection + - Adapter: https://github.com/HowProgrammingWorks/Adapter + - Bridge: https://github.com/HowProgrammingWorks/Bridge + - Decorator: https://github.com/HowProgrammingWorks/Decorator + - Wrapper: https://github.com/HowProgrammingWorks/Wrapper + - Facade: https://github.com/HowProgrammingWorks/Facade + - Chain of responsibility: https://github.com/HowProgrammingWorks/ChainOfResponsibility + - Mediator: https://github.com/HowProgrammingWorks/Mediator + - Visitor: https://github.com/HowProgrammingWorks/Visitor + - Proxy: https://github.com/HowProgrammingWorks/Proxy +- Decoupling with Events and Messaging + - EventTarget and EventEmitter: https://github.com/HowProgrammingWorks/Events + - EventEmitter: https://github.com/HowProgrammingWorks/EventEmitter + - Observer: https://github.com/HowProgrammingWorks/Observer + - Streams: Data Flows and Transformations + - RxJS and Event streams + - Actor model +- State and data manipulations + - Command: https://github.com/HowProgrammingWorks/Command + - State: https://github.com/HowProgrammingWorks/State + - Iterator: https://github.com/HowProgrammingWorks/Iterator + - Composite: https://github.com/HowProgrammingWorks/Composite + - Memento: https://github.com/HowProgrammingWorks/Memento + - Automata, Finite-state machine +- Related topics + - Error handling, Exceptions, Soft Failures, Logging + - DSL, AST with Pattern Interpreter, LISP + - Service Locator + - Interpreter: https://github.com/HowProgrammingWorks/Interpreter + - Strategy: https://github.com/HowProgrammingWorks/Strategy + - Template method: https://github.com/HowProgrammingWorks/TemplateMethod + - GRASP: Polymorphism + - GRASP: Protected variations + - GRASP: Pure fabrication -- [Шаблон Singleton (синглтон) в JavaScript](https://youtu.be/qdJ5yikZnfE) - - Примеры кода: https://github.com/HowProgrammingWorks/Singleton -- [Фабрики и пулы объектов в JavaScript, factorify, poolify](https://youtu.be/Ax_mSvadFp8) - - Фабрики: https://github.com/HowProgrammingWorks/Factory - - Пулы объектов: https://github.com/HowProgrammingWorks/Pool -- [Фасад - паттерн для скрытия сложности](https://youtu.be/oJtBO7CystE) - - Примеры кода: https://github.com/HowProgrammingWorks/Facade -- [Адаптер (Adapter) - паттерн достижения совместимости](https://youtu.be/cA65McLQrR8) - - Примеры кода: https://github.com/HowProgrammingWorks/Adapter -- [Стратегия (Strategy) - выбор взаимозаменяемого поведения](https://youtu.be/hO8VSVv0NqM) - - Примеры кода: https://github.com/HowProgrammingWorks/Strategy -- [Паттерн Команда (Command) действие и параметры как объект](https://youtu.be/vER0vYL4hM4) - - Примеры кода: https://github.com/HowProgrammingWorks/Command -- [Паттерн Revealing Constructor - открытый конструктор](https://youtu.be/leR5sXRkuJI) - - Примеры кода: https://github.com/HowProgrammingWorks/RevealingConstructor -- [Паттерн Наблюдатель (Observer + Observable)](https://youtu.be/_bFXuLcXoXg) - - Примеры кода: https://github.com/HowProgrammingWorks/Observer -- [Принцип единственной ответственности и закон Конвея](https://youtu.be/o4bQywkBKOI) - - Примеры кода: https://github.com/HowProgrammingWorks/SingleResponsibility -- [Ассоциация, Агрегация и Композиция](https://youtu.be/tOIcBrzezK0) - - Примеры кода: https://github.com/HowProgrammingWorks/Association -- [Принцип подстановки Барбары Лисков](https://youtu.be/RbhYxygxroc) - - Примеры кода: https://github.com/HowProgrammingWorks/LiskovSubstitution -- [Антипаттерны объектно-ориентированного программирования](https://youtu.be/9d5TG1VsLeU) - - Примеры кода: https://github.com/HowProgrammingWorks/Antipatterns/tree/master/JavaScript/03-OOP +## Books + +- «Design Patterns: Elements of Reusable Object-Oriented Software» Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides +- «Refactoring: Improving the Design of Existing Code Edition Unstated» Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts, Erich Gamma +- «Patterns of Enterprise Application Architecture» Martin Fowler +- «Clean Architecture: A Craftsman's Guide to Software Structure and Design» Robert C. Martin +- «Clean Code: A Handbook of Agile Software Craftmanship» Robert C. Martin +- «The Clean Coder: A Code of Conduct for Professional Programmers» Robert C. Martin +- «Designing Object Oriented C++ Applications Using The Booch Method» Robert C. Martin +- «Agile Software Development, Principles, Patterns, and Practices» Robert C. Martin +- «Agile Principles, Patterns, And Practices in C#» Robert C. Martin +- «UML for Java Programmers» Robert C. Martin +- «Working Effectively with Legacy Code» Robert C. Martin +- «Clean Agile: Back to Basics» Robert C. Martin +- «Clean Craftsmanship: Disciplines, Standards, and Ethics» Robert C. Martin +- «Functional Design: Principles, Patterns, and Practices» Robert C. Martin + +## Old lectures + +- Singleton: https://youtu.be/qdJ5yikZnfE +- Factory and Pool: https://youtu.be/Ax_mSvadFp8 +- Facade: https://youtu.be/oJtBO7CystE +- Adapter: https://youtu.be/cA65McLQrR8 +- GoF Strategy: https://youtu.be/hO8VSVv0NqM +- GoF Command: https://youtu.be/vER0vYL4hM4 +- Revealing Constructor: https://youtu.be/leR5sXRkuJI +- GoF Observable + Observer: https://youtu.be/_bFXuLcXoXg +- Single responsibility principle: https://youtu.be/o4bQywkBKOI +- Association, aggregation, composition: https://youtu.be/tOIcBrzezK0 +- Liskov substitution principle: https://youtu.be/RbhYxygxroc +- Iterator and AsyncIterator: https://youtu.be/rBGFlWpVpGs +- Thenabe: https://youtu.be/Jdf_tZuJbHI https://youtu.be/DXp__1VNIvI +- Observer + Observable: https://youtu.be/_bFXuLcXoXg From e8d5591296c70393415cac01f70d82c47d868592 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 12 Feb 2025 18:19:05 -0500 Subject: [PATCH 168/217] Create Advanced-2025.md --- Courses/Advanced-2025.md | 71 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 Courses/Advanced-2025.md diff --git a/Courses/Advanced-2025.md b/Courses/Advanced-2025.md new file mode 100644 index 0000000..fe6424d --- /dev/null +++ b/Courses/Advanced-2025.md @@ -0,0 +1,71 @@ +# Programming Fundamentals (part 2) + +- JavaScript and TypeScript machinery + - Timers: https://github.com/HowProgrammingWorks/Timers + - Collections: https://github.com/HowProgrammingWorks/Collections + - Hash Map: https://github.com/HowProgrammingWorks/Map + - Set: https://github.com/HowProgrammingWorks/Set + - Typed Arrays: https://github.com/HowProgrammingWorks/TypedArrays + - Generators: https://github.com/HowProgrammingWorks/Generator + - Async generators: https://github.com/HowProgrammingWorks/AsyncGenerator + - Iterator: https://github.com/HowProgrammingWorks/Iterator + - Async iterator: https://github.com/HowProgrammingWorks/AsyncIterator +- Fundamentals + - Generics: https://github.com/HowProgrammingWorks/Generics + - Modularity, Layers and Low Coupling + - Closure: https://github.com/HowProgrammingWorks/Closure + - Function composition: https://github.com/HowProgrammingWorks/Composition + - Memoization: https://github.com/HowProgrammingWorks/Memoization + - Lists: https://github.com/HowProgrammingWorks/LinkedList + - Queue and Dqueue: https://github.com/HowProgrammingWorks/Dequeue + - Functional programming: https://github.com/HowProgrammingWorks/FunctionalProgramming + - Functor and Monad: https://github.com/HowProgrammingWorks/Functor +- Async Programming + - Asynchronous programming: https://github.com/HowProgrammingWorks/AsynchronousProgramming + - Reactive programming https://github.com/HowProgrammingWorks/ReactiveProgramming + - Promise: https://github.com/HowProgrammingWorks/Promise + - Async/await: https://github.com/HowProgrammingWorks/AsyncAwait + - EventEmitter: https://github.com/HowProgrammingWorks/EventEmitter + - EventTarget: https://github.com/HowProgrammingWorks/Events +- Principles and Techniques + - GRASP: Information expert + - GRASP: Low coupling and High cohesion + - Decomposition, Instantiation, Encapsulation, Delegation + - Class composition (Aggregation, Composition, Association) +- SOLID + - Single responsibility principle: https://github.com/HowProgrammingWorks/SingleResponsibility + - Open/closed principle: https://github.com/HowProgrammingWorks/OpenClosed + - Liskov substitution principle: https://github.com/HowProgrammingWorks/LiskovSubstitution + - Interface segregation principle: https://github.com/HowProgrammingWorks/InterfaceSegregation + - Dependency inversion principle: https://github.com/HowProgrammingWorks/DependencyInversion +- Basic patterns + - Proxy: https://github.com/HowProgrammingWorks/Proxy + - Factory: https://github.com/HowProgrammingWorks/Factory + - Object Pool: https://github.com/HowProgrammingWorks/Pool + - Wrappers: https://github.com/HowProgrammingWorks/Wrapper + - FSM: https://github.com/HowProgrammingWorks/Automata + - Singleton: https://github.com/HowProgrammingWorks/Singleton + - Strategy: https://github.com/HowProgrammingWorks/Strategy + - Adapter: https://github.com/HowProgrammingWorks/Adapter + - Wrapper: https://github.com/HowProgrammingWorks/Wrapper +- Metaprogramming + - Introspection: https://github.com/HowProgrammingWorks/Introspection + - Reflect API: https://github.com/HowProgrammingWorks/Reflect + - Reflection: https://github.com/HowProgrammingWorks/Reflection + +## Books + +- «Design Patterns: Elements of Reusable Object-Oriented Software» Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides +- «Refactoring: Improving the Design of Existing Code Edition Unstated» Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts, Erich Gamma +- «Patterns of Enterprise Application Architecture» Martin Fowler +- «Clean Architecture: A Craftsman's Guide to Software Structure and Design» Robert C. Martin +- «Clean Code: A Handbook of Agile Software Craftmanship» Robert C. Martin +- «The Clean Coder: A Code of Conduct for Professional Programmers» Robert C. Martin +- «Designing Object Oriented C++ Applications Using The Booch Method» Robert C. Martin +- «Agile Software Development, Principles, Patterns, and Practices» Robert C. Martin +- «Agile Principles, Patterns, And Practices in C#» Robert C. Martin +- «UML for Java Programmers» Robert C. Martin +- «Working Effectively with Legacy Code» Robert C. Martin +- «Clean Agile: Back to Basics» Robert C. Martin +- «Clean Craftsmanship: Disciplines, Standards, and Ethics» Robert C. Martin +- «Functional Design: Principles, Patterns, and Practices» Robert C. Martin From 142d54066a6d969d5f9c2aed6c0caa108041923e Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 13 Feb 2025 05:24:59 -0500 Subject: [PATCH 169/217] Optimize 1st year plan --- Courses/Advanced-2025.md | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/Courses/Advanced-2025.md b/Courses/Advanced-2025.md index fe6424d..6c6772e 100644 --- a/Courses/Advanced-2025.md +++ b/Courses/Advanced-2025.md @@ -2,9 +2,6 @@ - JavaScript and TypeScript machinery - Timers: https://github.com/HowProgrammingWorks/Timers - - Collections: https://github.com/HowProgrammingWorks/Collections - - Hash Map: https://github.com/HowProgrammingWorks/Map - - Set: https://github.com/HowProgrammingWorks/Set - Typed Arrays: https://github.com/HowProgrammingWorks/TypedArrays - Generators: https://github.com/HowProgrammingWorks/Generator - Async generators: https://github.com/HowProgrammingWorks/AsyncGenerator @@ -13,7 +10,6 @@ - Fundamentals - Generics: https://github.com/HowProgrammingWorks/Generics - Modularity, Layers and Low Coupling - - Closure: https://github.com/HowProgrammingWorks/Closure - Function composition: https://github.com/HowProgrammingWorks/Composition - Memoization: https://github.com/HowProgrammingWorks/Memoization - Lists: https://github.com/HowProgrammingWorks/LinkedList @@ -22,7 +18,7 @@ - Functor and Monad: https://github.com/HowProgrammingWorks/Functor - Async Programming - Asynchronous programming: https://github.com/HowProgrammingWorks/AsynchronousProgramming - - Reactive programming https://github.com/HowProgrammingWorks/ReactiveProgramming + - Reactive programming: https://github.com/HowProgrammingWorks/ReactiveProgramming - Promise: https://github.com/HowProgrammingWorks/Promise - Async/await: https://github.com/HowProgrammingWorks/AsyncAwait - EventEmitter: https://github.com/HowProgrammingWorks/EventEmitter @@ -39,15 +35,15 @@ - Interface segregation principle: https://github.com/HowProgrammingWorks/InterfaceSegregation - Dependency inversion principle: https://github.com/HowProgrammingWorks/DependencyInversion - Basic patterns - - Proxy: https://github.com/HowProgrammingWorks/Proxy - - Factory: https://github.com/HowProgrammingWorks/Factory - - Object Pool: https://github.com/HowProgrammingWorks/Pool - - Wrappers: https://github.com/HowProgrammingWorks/Wrapper - - FSM: https://github.com/HowProgrammingWorks/Automata - Singleton: https://github.com/HowProgrammingWorks/Singleton - - Strategy: https://github.com/HowProgrammingWorks/Strategy + - Decorator: https://github.com/HowProgrammingWorks/Decorator - Adapter: https://github.com/HowProgrammingWorks/Adapter - Wrapper: https://github.com/HowProgrammingWorks/Wrapper + - Proxy: https://github.com/HowProgrammingWorks/ProxyPattern + - Factory: https://github.com/HowProgrammingWorks/Factory + - Object Pool: https://github.com/HowProgrammingWorks/Pool + - Strategy: https://github.com/HowProgrammingWorks/Strategy + - FSM: https://github.com/HowProgrammingWorks/Automata - Metaprogramming - Introspection: https://github.com/HowProgrammingWorks/Introspection - Reflect API: https://github.com/HowProgrammingWorks/Reflect From 3b159f2c06c74e8a4ffa8a766f17f9666b01ee3d Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Fri, 14 Feb 2025 05:38:17 -0500 Subject: [PATCH 170/217] Create Architecture-2025.md --- Courses/Architecture-2025.md | 59 ++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 Courses/Architecture-2025.md diff --git a/Courses/Architecture-2025.md b/Courses/Architecture-2025.md new file mode 100644 index 0000000..2d881f6 --- /dev/null +++ b/Courses/Architecture-2025.md @@ -0,0 +1,59 @@ +# Software Structure & Architecture + +1. Introduction +2. Layered (onion), DDD, Clean architecture +3. App structure, Modularity, DI, unittesting +4. DTOs, models, race conditions +5. Hexagonal Architecture, ports and adapters architecture +6. Clustering, Parallel, Distributed systems, CAP, ACID, BASE, Locking, CQRS +7. Actor Model +8. Databases, data modeling +9. DSL, AST, LISP +10. Command, QueryObject, CQS, CQRS, EventSourcing +11. Messaging: MQ, Pub/Sub, Pull + +Additional topics: +- Interaction: Data (shared state), Calls (RPC), Events (MQ) +- Three-Tier Architecture, Multitier, Pipeline +- SOA: web services microservices, serverless +- Data warehouses and DBMS: relational, noSQL, columnar, key-value +- Distributed IS topologies: star, bus, ring, pipeline, fully connected +- API Design +- Corporate integration buses (exchange with external subsystems) +- Task and resource schedulers +- Testing, quality assessments, continuous integration +- Infrastructure, deployment, update, migration, reengineering +- Balancing, replication, sharding, resharding, backups and recovery +- Security, authorization, authentication, application firewall +- Application and system logging, incident investigation +- Analysis and reengineering of business processes + +## Old lectures + +- [Архитектурный подход к программированию](https://youtu.be/d_vyO2CkiOc) +- [Слои, связанность и связность кода](https://youtu.be/A3RpwNlVeyY) + - Примеры кода: https://github.com/HowProgrammingWorks/Abstractions +- [Модули, слои, структура проекта, песочницы в JavaScript и Node.js](https://youtu.be/O7A9chb573E) + - Пример проекта: https://github.com/HowProgrammingWorks/Project + - Абстрактные слои: https://github.com/HowProgrammingWorks/AbstractionLayers + - Песочницы: https://github.com/HowProgrammingWorks/Sandboxes +- [Инверсия управления и внедрение зависимостей в Node.js](https://youtu.be/Fz86Fdjz-LM) + - Инверсия управления: https://github.com/HowProgrammingWorks/InversionOfControl + - Внедрение зависимостей: https://github.com/HowProgrammingWorks/DependencyInjection +- [Межпроцессовое взаимодействие в Node.js](https://youtu.be/2OXWZFMvfbc) + - Примеры кода: https://github.com/HowProgrammingWorks/InterProcessCommunication +- [Высоконагруженные распределенные приложения на Node.js](https://youtu.be/7tfZDABPvVs) +- [Слой доступа к данным, курсор, транзакция](https://youtu.be/CRcSWtWVvrA) + - Примеры кода: https://github.com/HowProgrammingWorks/Transaction +- [Разработка API на Node.js (клиент и сервер)](https://youtu.be/-az912XBCu8) + - Примеры кода: https://github.com/HowProgrammingWorks/API +- [CQS, CQRS, Event Sourcing - Разделение запросов и модификации данных](https://youtu.be/T2tRc80Q8Qw) + - CQS: https://github.com/HowProgrammingWorks/CQS + - CQRS: https://github.com/HowProgrammingWorks/CQRS + - EventSourcing: https://github.com/HowProgrammingWorks/EventSourcing +- [Применение EventSourcing](https://youtu.be/kFNtKiK2SPs) + - https://github.com/HowProgrammingWorks/EventSourcing + - https://github.com/HowProgrammingWorks/CQRS + - https://github.com/HowProgrammingWorks/Command +- [Serverless Clouds (FaaS) и изоляция контекстов запросов в Node.js](https://youtu.be/x-Rd6fPV6L8) + - Слайды: https://www.slideshare.net/tshemsedinov/serverless-clouds-faas-and-request-context-isolation-in-nodejs From 8684b3ad4ff1b473fd7efadf5ea02a9820a3a892 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 24 Feb 2025 15:58:28 -0500 Subject: [PATCH 171/217] Update Advanced-2025.md --- Courses/Advanced-2025.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Courses/Advanced-2025.md b/Courses/Advanced-2025.md index 6c6772e..cbefd89 100644 --- a/Courses/Advanced-2025.md +++ b/Courses/Advanced-2025.md @@ -41,6 +41,7 @@ - Wrapper: https://github.com/HowProgrammingWorks/Wrapper - Proxy: https://github.com/HowProgrammingWorks/ProxyPattern - Factory: https://github.com/HowProgrammingWorks/Factory + - Factory Method: https://github.com/HowProgrammingWorks/FactoryMethod - Object Pool: https://github.com/HowProgrammingWorks/Pool - Strategy: https://github.com/HowProgrammingWorks/Strategy - FSM: https://github.com/HowProgrammingWorks/Automata From 07d9641ba46c5859ecf79aa8881d41e8d85bd994 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 24 Feb 2025 16:08:17 -0500 Subject: [PATCH 172/217] Add lectures --- Courses/Architecture-2025.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Courses/Architecture-2025.md b/Courses/Architecture-2025.md index 2d881f6..c019b81 100644 --- a/Courses/Architecture-2025.md +++ b/Courses/Architecture-2025.md @@ -11,6 +11,9 @@ 9. DSL, AST, LISP 10. Command, QueryObject, CQS, CQRS, EventSourcing 11. Messaging: MQ, Pub/Sub, Pull +12. System integration: api, bus, brocker, mq +13. Communication styles: data, call, events, log, p2p +14. Architecture for Web: Frontend and Backend Additional topics: - Interaction: Data (shared state), Calls (RPC), Events (MQ) From fc27afbbac32285a6d2337daafd5768d1fc05397 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 25 Feb 2025 19:03:33 -0500 Subject: [PATCH 173/217] Add LoD --- Courses/Architecture-2025.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Courses/Architecture-2025.md b/Courses/Architecture-2025.md index c019b81..dafa86c 100644 --- a/Courses/Architecture-2025.md +++ b/Courses/Architecture-2025.md @@ -60,3 +60,14 @@ Additional topics: - https://github.com/HowProgrammingWorks/Command - [Serverless Clouds (FaaS) и изоляция контекстов запросов в Node.js](https://youtu.be/x-Rd6fPV6L8) - Слайды: https://www.slideshare.net/tshemsedinov/serverless-clouds-faas-and-request-context-isolation-in-nodejs + +## Additional topics + +- Law of Demeter (LoD) - Principle of Least Knowledge or Don't Talk to Strangers + - Low Coupling (LC): The goal of LoD is to reduce coupling by reducing the knowledge of a class about other classes. + - Tell, Don't Ask/Information Expert (TdA/IE): LoD is more specific than TdA/IE because TdA/IE can be applied in a wider context (e.g. for responsibility assignment). Applying TdA leads to solutions which are good according to LoD. Note that the reverse is not true: Accoring to LoD you may get and set values from an object passed as a parameter to a method. + - A method of an object should invoke only the methods of the following kinds of objects: + - itself + - its parameters + - any objects it creates/instantiates + - its direct component objects From 9d19baa90b89df054fce026fbffafccb3984d1e4 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Fri, 28 Feb 2025 05:39:29 -0500 Subject: [PATCH 174/217] Update Architecture-2025.md --- Courses/Architecture-2025.md | 37 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/Courses/Architecture-2025.md b/Courses/Architecture-2025.md index dafa86c..dea66b6 100644 --- a/Courses/Architecture-2025.md +++ b/Courses/Architecture-2025.md @@ -8,19 +8,19 @@ 6. Clustering, Parallel, Distributed systems, CAP, ACID, BASE, Locking, CQRS 7. Actor Model 8. Databases, data modeling -9. DSL, AST, LISP +9. Domain Specific Languages: DSL, AST, LISP 10. Command, QueryObject, CQS, CQRS, EventSourcing 11. Messaging: MQ, Pub/Sub, Pull -12. System integration: api, bus, brocker, mq -13. Communication styles: data, call, events, log, p2p -14. Architecture for Web: Frontend and Backend +12. System integration and topology: API, bus, brocker, MQ +13. Communication styles: data, call, event, log sync, p2p, blockchain +14. Feature-Sliced Design +15. Architecture for Web: DDD for Frontend and Backend -Additional topics: -- Interaction: Data (shared state), Calls (RPC), Events (MQ) -- Three-Tier Architecture, Multitier, Pipeline -- SOA: web services microservices, serverless +## Additional topics + +- Pipeline architecture +- SOA: web services, microservices, serverless - Data warehouses and DBMS: relational, noSQL, columnar, key-value -- Distributed IS topologies: star, bus, ring, pipeline, fully connected - API Design - Corporate integration buses (exchange with external subsystems) - Task and resource schedulers @@ -30,6 +30,14 @@ Additional topics: - Security, authorization, authentication, application firewall - Application and system logging, incident investigation - Analysis and reengineering of business processes +- Law of Demeter (LoD) - Principle of Least Knowledge or Don't Talk to Strangers + - Low Coupling (LC): The goal of LoD is to reduce coupling by reducing the knowledge of a class about other classes. + - Tell, Don't Ask/Information Expert (TdA/IE): LoD is more specific than TdA/IE because TdA/IE can be applied in a wider context (e.g. for responsibility assignment). Applying TdA leads to solutions which are good according to LoD. Note that the reverse is not true: Accoring to LoD you may get and set values from an object passed as a parameter to a method. + - A method of an object should invoke only the methods of the following kinds of objects: + - itself + - its parameters + - any objects it creates/instantiates + - its direct component objects ## Old lectures @@ -60,14 +68,3 @@ Additional topics: - https://github.com/HowProgrammingWorks/Command - [Serverless Clouds (FaaS) и изоляция контекстов запросов в Node.js](https://youtu.be/x-Rd6fPV6L8) - Слайды: https://www.slideshare.net/tshemsedinov/serverless-clouds-faas-and-request-context-isolation-in-nodejs - -## Additional topics - -- Law of Demeter (LoD) - Principle of Least Knowledge or Don't Talk to Strangers - - Low Coupling (LC): The goal of LoD is to reduce coupling by reducing the knowledge of a class about other classes. - - Tell, Don't Ask/Information Expert (TdA/IE): LoD is more specific than TdA/IE because TdA/IE can be applied in a wider context (e.g. for responsibility assignment). Applying TdA leads to solutions which are good according to LoD. Note that the reverse is not true: Accoring to LoD you may get and set values from an object passed as a parameter to a method. - - A method of an object should invoke only the methods of the following kinds of objects: - - itself - - its parameters - - any objects it creates/instantiates - - its direct component objects From f0545c8993de1aaa2598e8b958fcc1c9e257b182 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 22 Mar 2025 18:16:46 -0400 Subject: [PATCH 175/217] Add talks --- Courses/Talks.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index 1ec4827..ec78a66 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -6,6 +6,9 @@ - [🎙️ Найм зламаний — Макс Безуглий та Тимур Шемсединов — архітектура, алгоритми, патерни, софтскіли...](https://youtu.be/z2A40MbiQb4) - [🎙️ Карьера в IT и найм на работу: вакансии, резюме, собеседования, офферы, опыт, интервью, скилы](https://youtu.be/qkj9uJeEPhg) - [🧩 JavaScript и TypeScript Patterns Q&A Call #13: Литература, курс, DDD, моделирование, софтскилы](https://youtu.be/4jcB_G_u8BY) +- 🧩 Паттерны проектирования для JavaScript и TypeScript: Шемсединов Тимур, Илья Климов, Дмитрий Нечай - 2025-03-22 +- [Local-first подход, CRDT и фронтенд — синхронизация в распределенных системах](https://youtu.be/XNUNxghX9dg) +- [🧩 JavaScript и TypeScript Patterns Q&A Call #13: Литература, курс, DDD, моделирование, софтскилы](https://youtu.be/4jcB_G_u8BY) ## 2024 From 8f889ec0cf253b086f6bd31c5b1c2fead2e854c0 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Fri, 28 Mar 2025 11:07:26 -0400 Subject: [PATCH 176/217] Update Architecture-2025.md --- Courses/Architecture-2025.md | 94 +++++++++++++++++++++++++++--------- 1 file changed, 71 insertions(+), 23 deletions(-) diff --git a/Courses/Architecture-2025.md b/Courses/Architecture-2025.md index dea66b6..0d99ae2 100644 --- a/Courses/Architecture-2025.md +++ b/Courses/Architecture-2025.md @@ -16,6 +16,54 @@ 14. Feature-Sliced Design 15. Architecture for Web: DDD for Frontend and Backend +## Students seminar topics + +Timing: 30-60 min + discussion (min 30 min) +Requirements: PDF or MD file in github repo, presentation google docs +Topic: please propose before call in 3-7 days + +- Pipeline architecture +- SOA: web services, microservices, serverless +- One of noSQL db solution +- Task and resource schedulers +- Testing, quality assessments +- Infrastructure, deployment, CI/CD +- DB Migration +- DB Balancing and sharding +- DB replication +- DB Backups and recovery +- API Balancing +- Application and system logging +- Law of Demeter (LoD) // See comments in next section +- DAL (data access layer) +- Dependency injection & Inversion of Control (for your language) +- DDD: Value object, Null object, DTO, Active Record, Data access object, Data mapper +- Blockchain: voting system for decision making and specialist selecting; registers; distributed data storage // Andrii Schavinskyi +- Object-relational mismatch (from Kleppmann) +- Cache strategies +- Indexing structures +- Serialization formats comparison and evolution: binary files, xml, yml, json, protobuf, v8 ser format, etc. +- DB ACID // Fowler +- Locking and offline concurrency patterns // Fowler +- Sessions: session token, JWT token + +## Books + +- «Patterns of Enterprise Application Architecture» Martin Fowler +- «Designing Data-intensive Applications» Martin Kleppmann +- «Clean Architecture: A Craftsman's Guide to Software Structure and Design» Robert C. Martin +- «Refactoring: Improving the Design of Existing Code Edition Unstated» Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts, Erich Gamma +- «Working Effectively with Legacy Code» Robert C. Martin +- «Clean Agile: Back to Basics» Robert C. Martin +- «Clean Craftsmanship: Disciplines, Standards, and Ethics» Robert C. Martin +- «Functional Design: Principles, Patterns, and Practices» Robert C. Martin +- Computation theory: Turing, von Neumann, Curry, Church +- Ludwig Wittgenstein  +- Avram Noam Chomsky- A Pattern Language: Towns, Buildings, Construction // Christopher W. Alexander +- Cybernetics: Norbert Wiener and Victor Mikhailovich Glushkov +- System approach: Ludwig von Bertalanffy, William Ross Ashby +- Stafford Beer + ## Additional topics - Pipeline architecture @@ -31,40 +79,40 @@ - Application and system logging, incident investigation - Analysis and reengineering of business processes - Law of Demeter (LoD) - Principle of Least Knowledge or Don't Talk to Strangers - - Low Coupling (LC): The goal of LoD is to reduce coupling by reducing the knowledge of a class about other classes. - - Tell, Don't Ask/Information Expert (TdA/IE): LoD is more specific than TdA/IE because TdA/IE can be applied in a wider context (e.g. for responsibility assignment). Applying TdA leads to solutions which are good according to LoD. Note that the reverse is not true: Accoring to LoD you may get and set values from an object passed as a parameter to a method. - - A method of an object should invoke only the methods of the following kinds of objects: - - itself - - its parameters - - any objects it creates/instantiates - - its direct component objects +  - Low Coupling (LC): The goal of LoD is to reduce coupling by reducing the knowledge of a class about other classes. +  - Tell, Don't Ask/Information Expert (TdA/IE): LoD is more specific than TdA/IE because TdA/IE can be applied in a wider context (e.g. for responsibility assignment). Applying TdA leads to solutions which are good according to LoD. Note that the reverse is not true: According to LoD you may get and set values from an object passed as a parameter to a method. +  - A method of an object should invoke only the methods of the following kinds of objects: +    - itself +    - its parameters +    - any objects it creates/instantiates +    - its direct component objects ## Old lectures - [Архитектурный подход к программированию](https://youtu.be/d_vyO2CkiOc) - [Слои, связанность и связность кода](https://youtu.be/A3RpwNlVeyY) - - Примеры кода: https://github.com/HowProgrammingWorks/Abstractions +  - Примеры кода: https://github.com/HowProgrammingWorks/Abstractions - [Модули, слои, структура проекта, песочницы в JavaScript и Node.js](https://youtu.be/O7A9chb573E) - - Пример проекта: https://github.com/HowProgrammingWorks/Project - - Абстрактные слои: https://github.com/HowProgrammingWorks/AbstractionLayers - - Песочницы: https://github.com/HowProgrammingWorks/Sandboxes +  - Пример проекта: https://github.com/HowProgrammingWorks/Project +  - Абстрактные слои: https://github.com/HowProgrammingWorks/AbstractionLayers +  - Песочницы: https://github.com/HowProgrammingWorks/Sandboxes - [Инверсия управления и внедрение зависимостей в Node.js](https://youtu.be/Fz86Fdjz-LM) - - Инверсия управления: https://github.com/HowProgrammingWorks/InversionOfControl - - Внедрение зависимостей: https://github.com/HowProgrammingWorks/DependencyInjection +  - Инверсия управления: https://github.com/HowProgrammingWorks/InversionOfControl +  - Внедрение зависимостей: https://github.com/HowProgrammingWorks/DependencyInjection - [Межпроцессовое взаимодействие в Node.js](https://youtu.be/2OXWZFMvfbc) - - Примеры кода: https://github.com/HowProgrammingWorks/InterProcessCommunication +  - Примеры кода: https://github.com/HowProgrammingWorks/InterProcessCommunication - [Высоконагруженные распределенные приложения на Node.js](https://youtu.be/7tfZDABPvVs) - [Слой доступа к данным, курсор, транзакция](https://youtu.be/CRcSWtWVvrA) - - Примеры кода: https://github.com/HowProgrammingWorks/Transaction +  - Примеры кода: https://github.com/HowProgrammingWorks/Transaction - [Разработка API на Node.js (клиент и сервер)](https://youtu.be/-az912XBCu8) - - Примеры кода: https://github.com/HowProgrammingWorks/API +  - Примеры кода: https://github.com/HowProgrammingWorks/API - [CQS, CQRS, Event Sourcing - Разделение запросов и модификации данных](https://youtu.be/T2tRc80Q8Qw) - - CQS: https://github.com/HowProgrammingWorks/CQS - - CQRS: https://github.com/HowProgrammingWorks/CQRS - - EventSourcing: https://github.com/HowProgrammingWorks/EventSourcing +  - CQS: https://github.com/HowProgrammingWorks/CQS +  - CQRS: https://github.com/HowProgrammingWorks/CQRS +  - EventSourcing: https://github.com/HowProgrammingWorks/EventSourcing - [Применение EventSourcing](https://youtu.be/kFNtKiK2SPs) - - https://github.com/HowProgrammingWorks/EventSourcing - - https://github.com/HowProgrammingWorks/CQRS - - https://github.com/HowProgrammingWorks/Command +  - https://github.com/HowProgrammingWorks/EventSourcing +  - https://github.com/HowProgrammingWorks/CQRS +  - https://github.com/HowProgrammingWorks/Command - [Serverless Clouds (FaaS) и изоляция контекстов запросов в Node.js](https://youtu.be/x-Rd6fPV6L8) - - Слайды: https://www.slideshare.net/tshemsedinov/serverless-clouds-faas-and-request-context-isolation-in-nodejs +  - Слайды: https://www.slideshare.net/tshemsedinov/serverless-clouds-faas-and-request-context-isolation-in-nodejs From 126a5f5bbd0d94c0f8a9f3dd174fd890c8516f77 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 5 Apr 2025 18:06:01 -0400 Subject: [PATCH 177/217] Add Actor and Reactor stream --- Courses/Talks.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index ec78a66..aea83da 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -9,6 +9,7 @@ - 🧩 Паттерны проектирования для JavaScript и TypeScript: Шемсединов Тимур, Илья Климов, Дмитрий Нечай - 2025-03-22 - [Local-first подход, CRDT и фронтенд — синхронизация в распределенных системах](https://youtu.be/XNUNxghX9dg) - [🧩 JavaScript и TypeScript Patterns Q&A Call #13: Литература, курс, DDD, моделирование, софтскилы](https://youtu.be/4jcB_G_u8BY) +- [🧩 Паттерны Actor, Reactor, Proactor для JavaScript и TypeScript: Шемсединов Тимур, Дмитрий Нечай](https://youtube.com/live/tpY01TLctAs) ## 2024 From 7a12cfb7d50ec9d20b231470279d53f0683d8e96 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 12 Apr 2025 16:25:59 -0400 Subject: [PATCH 178/217] Update Talks.md --- Courses/Talks.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Courses/Talks.md b/Courses/Talks.md index aea83da..60c90d5 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -6,10 +6,11 @@ - [🎙️ Найм зламаний — Макс Безуглий та Тимур Шемсединов — архітектура, алгоритми, патерни, софтскіли...](https://youtu.be/z2A40MbiQb4) - [🎙️ Карьера в IT и найм на работу: вакансии, резюме, собеседования, офферы, опыт, интервью, скилы](https://youtu.be/qkj9uJeEPhg) - [🧩 JavaScript и TypeScript Patterns Q&A Call #13: Литература, курс, DDD, моделирование, софтскилы](https://youtu.be/4jcB_G_u8BY) -- 🧩 Паттерны проектирования для JavaScript и TypeScript: Шемсединов Тимур, Илья Климов, Дмитрий Нечай - 2025-03-22 -- [Local-first подход, CRDT и фронтенд — синхронизация в распределенных системах](https://youtu.be/XNUNxghX9dg) +- [🧩 Паттерны проектирования для JavaScript и TypeScript: Шемсединов Тимур, Илья Климов, Дмитрий Нечай](https://www.youtube.com/live/ktZR4Vyv-i8) +- [🎙️ Local-first подход, CRDT и фронтенд — синхронизация в распределенных системах](https://youtu.be/XNUNxghX9dg) - [🧩 JavaScript и TypeScript Patterns Q&A Call #13: Литература, курс, DDD, моделирование, софтскилы](https://youtu.be/4jcB_G_u8BY) - [🧩 Паттерны Actor, Reactor, Proactor для JavaScript и TypeScript: Шемсединов Тимур, Дмитрий Нечай](https://youtube.com/live/tpY01TLctAs) +- [🧩 Доступ к данным в JavaScript TypeScript: Repository, Active Record, DTO, ORM, Query Builder, SAGA](https://www.youtube.com/watch?v=diH1VfV_38o) ## 2024 From b438179266b12269836afe110ab09f4bd18dcea9 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 19 Apr 2025 12:59:20 -0400 Subject: [PATCH 179/217] Update Talks.md --- Courses/Talks.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index 60c90d5..1ab1102 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -11,6 +11,7 @@ - [🧩 JavaScript и TypeScript Patterns Q&A Call #13: Литература, курс, DDD, моделирование, софтскилы](https://youtu.be/4jcB_G_u8BY) - [🧩 Паттерны Actor, Reactor, Proactor для JavaScript и TypeScript: Шемсединов Тимур, Дмитрий Нечай](https://youtube.com/live/tpY01TLctAs) - [🧩 Доступ к данным в JavaScript TypeScript: Repository, Active Record, DTO, ORM, Query Builder, SAGA](https://www.youtube.com/watch?v=diH1VfV_38o) +- [🧩 Оптимизация структур данных и паттернов — V8, JavaScript, TypeScript](https://youtube.com/live/PncSzdGTzk0) ## 2024 From 268f7a2abe0faa1d49a2c9474eac30c5f4db5f74 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Fri, 25 Apr 2025 04:57:30 -0400 Subject: [PATCH 180/217] Add topics --- Courses/Architecture-2025.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Courses/Architecture-2025.md b/Courses/Architecture-2025.md index 0d99ae2..6de87df 100644 --- a/Courses/Architecture-2025.md +++ b/Courses/Architecture-2025.md @@ -15,6 +15,8 @@ 13. Communication styles: data, call, event, log sync, p2p, blockchain 14. Feature-Sliced Design 15. Architecture for Web: DDD for Frontend and Backend +16. Data access patterns +17. Asynchronous programming ## Students seminar topics From 110f48590ede9c4fb847489fc39d2e2c2e2fbdd6 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 30 Apr 2025 14:08:32 -0400 Subject: [PATCH 181/217] Add link --- Courses/Talks.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index 1ab1102..7f11254 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -27,6 +27,7 @@ - [👏 Дія відкрила код - Diia code review 🤦](https://youtu.be/ggIk83GO25I) - [«Дія» открыла код! Что не так?](https://www.youtube.com/watch?v=Ug-tytIlhU0) - [🎙️ Lowcode/Nocode, AI in JavaScript — Dmytro Nechai — Дмитрий Нечай — Metarhia Community Meetup #182](https://youtu.be/tzZ316WTF2Q) +- [💡 Парадигмы и языки программирования, лингвистическая природа мышления инженера — Тимур Шемсединов, Сергей Одарыч](https://youtu.be/_i__fBmxCaY) ## 2023 From e6ef61753f8dbfce6174b9c5bd0264aa74a4bb59 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Fri, 2 May 2025 04:41:13 -0400 Subject: [PATCH 182/217] Update Architecture-2025.md --- Courses/Architecture-2025.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Courses/Architecture-2025.md b/Courses/Architecture-2025.md index 6de87df..d625380 100644 --- a/Courses/Architecture-2025.md +++ b/Courses/Architecture-2025.md @@ -17,6 +17,7 @@ 15. Architecture for Web: DDD for Frontend and Backend 16. Data access patterns 17. Asynchronous programming +18. Imperative shell, Functional core ## Students seminar topics From a763ca73b75e42c393fe2d0ab8acb865665f4c66 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 19 May 2025 14:23:14 -0400 Subject: [PATCH 183/217] Add lecture topics --- Courses/Architecture-2025.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Courses/Architecture-2025.md b/Courses/Architecture-2025.md index d625380..6642ca9 100644 --- a/Courses/Architecture-2025.md +++ b/Courses/Architecture-2025.md @@ -18,6 +18,8 @@ 16. Data access patterns 17. Asynchronous programming 18. Imperative shell, Functional core +19. Multi-paradigm programming in Architecture +20. Metaprogramming ## Students seminar topics From e89cfe2bd9ff56639d6fe0f57c9b7e863c963ef2 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 17 Jun 2025 08:54:12 -0400 Subject: [PATCH 184/217] Fix formatting in Architecture-2025.md --- Courses/Architecture-2025.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/Courses/Architecture-2025.md b/Courses/Architecture-2025.md index 6642ca9..d66c819 100644 --- a/Courses/Architecture-2025.md +++ b/Courses/Architecture-2025.md @@ -96,28 +96,28 @@ Topic: please propose before call in 3-7 days - [Архитектурный подход к программированию](https://youtu.be/d_vyO2CkiOc) - [Слои, связанность и связность кода](https://youtu.be/A3RpwNlVeyY) -  - Примеры кода: https://github.com/HowProgrammingWorks/Abstractions + - Примеры кода: https://github.com/HowProgrammingWorks/Abstractions - [Модули, слои, структура проекта, песочницы в JavaScript и Node.js](https://youtu.be/O7A9chb573E) -  - Пример проекта: https://github.com/HowProgrammingWorks/Project -  - Абстрактные слои: https://github.com/HowProgrammingWorks/AbstractionLayers -  - Песочницы: https://github.com/HowProgrammingWorks/Sandboxes + - Пример проекта: https://github.com/HowProgrammingWorks/Project + - Абстрактные слои: https://github.com/HowProgrammingWorks/AbstractionLayers + - Песочницы: https://github.com/HowProgrammingWorks/Sandboxes - [Инверсия управления и внедрение зависимостей в Node.js](https://youtu.be/Fz86Fdjz-LM) -  - Инверсия управления: https://github.com/HowProgrammingWorks/InversionOfControl -  - Внедрение зависимостей: https://github.com/HowProgrammingWorks/DependencyInjection + - Инверсия управления: https://github.com/HowProgrammingWorks/InversionOfControl + - Внедрение зависимостей: https://github.com/HowProgrammingWorks/DependencyInjection - [Межпроцессовое взаимодействие в Node.js](https://youtu.be/2OXWZFMvfbc) -  - Примеры кода: https://github.com/HowProgrammingWorks/InterProcessCommunication + - Примеры кода: https://github.com/HowProgrammingWorks/InterProcessCommunication - [Высоконагруженные распределенные приложения на Node.js](https://youtu.be/7tfZDABPvVs) - [Слой доступа к данным, курсор, транзакция](https://youtu.be/CRcSWtWVvrA) -  - Примеры кода: https://github.com/HowProgrammingWorks/Transaction + - Примеры кода: https://github.com/HowProgrammingWorks/Transaction - [Разработка API на Node.js (клиент и сервер)](https://youtu.be/-az912XBCu8) -  - Примеры кода: https://github.com/HowProgrammingWorks/API + - Примеры кода: https://github.com/HowProgrammingWorks/API - [CQS, CQRS, Event Sourcing - Разделение запросов и модификации данных](https://youtu.be/T2tRc80Q8Qw) -  - CQS: https://github.com/HowProgrammingWorks/CQS -  - CQRS: https://github.com/HowProgrammingWorks/CQRS -  - EventSourcing: https://github.com/HowProgrammingWorks/EventSourcing + - CQS: https://github.com/HowProgrammingWorks/CQS + - CQRS: https://github.com/HowProgrammingWorks/CQRS + - EventSourcing: https://github.com/HowProgrammingWorks/EventSourcing - [Применение EventSourcing](https://youtu.be/kFNtKiK2SPs) -  - https://github.com/HowProgrammingWorks/EventSourcing -  - https://github.com/HowProgrammingWorks/CQRS -  - https://github.com/HowProgrammingWorks/Command + - https://github.com/HowProgrammingWorks/EventSourcing + - https://github.com/HowProgrammingWorks/CQRS + - https://github.com/HowProgrammingWorks/Command - [Serverless Clouds (FaaS) и изоляция контекстов запросов в Node.js](https://youtu.be/x-Rd6fPV6L8) -  - Слайды: https://www.slideshare.net/tshemsedinov/serverless-clouds-faas-and-request-context-isolation-in-nodejs + - Слайды: https://www.slideshare.net/tshemsedinov/serverless-clouds-faas-and-request-context-isolation-in-nodejs From 82551ff3224a11230eb16fab2058b33081ea4071 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Tue, 8 Jul 2025 10:26:29 -0400 Subject: [PATCH 185/217] Update Async-2025.md --- Courses/Async-2025.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Courses/Async-2025.md b/Courses/Async-2025.md index 9e5515b..73f5e88 100644 --- a/Courses/Async-2025.md +++ b/Courses/Async-2025.md @@ -23,9 +23,9 @@ | `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` | | +| `signals` | `GoF pattern Iterator` | `BroadcastChannel` | `coroutines` | | +| `locks` | `Actor pattern` | `threads` | `Actor Model` | | +| `iterators` | `Disposable` | `processes` | `do` | | Условные обозначения: ⭐ новые лекции, ✨ открытые старые лекции, 💯 обязательные, 🧑‍🎓 продвинутые, ⚙️ системные, 🧑‍🚀 по выбору, ⚠️ устаревшее, 🧩 необязательные темы, 💻 примеры кода, 🧑‍💻 задания @@ -75,6 +75,10 @@ - 💻 Примеры кода из старого курса: https://github.com/HowProgrammingWorks/AsyncAwait - 💻 Примеры кода: (готовятся), будут тут https://github.com/HowProgrammingWorks/AsyncErrorHandling - 🧑‍💻 Задания по обработке ошибок +- 🧑‍🎓 Контракт `Disposable` + - ⭐ Явное управление ресурсами (Explicit Resource Management) + - ⭐ Подсчет ссылок и освобождение ресурсов на базе `Disposable` + - ⭐ Реализация концепции `Ownership` на базе `Disposable` - 🧑‍🎓 Асинхронная очередь `AsyncQueue` - ⭐ Асинхронная очередь (в платном курсе) - ✨ Конкурентная асинхронная очередь из старой лекции](https://youtu.be/Lg46AH8wFvg) From 56f45b612107a5e61b288186808013751d59ba9c Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 9 Jul 2025 04:25:16 -0400 Subject: [PATCH 186/217] Update Async-2025.md --- Courses/Async-2025.md | 284 ++++++++++++++++++++++++------------------ 1 file changed, 162 insertions(+), 122 deletions(-) diff --git a/Courses/Async-2025.md b/Courses/Async-2025.md index 73f5e88..aedf560 100644 --- a/Courses/Async-2025.md +++ b/Courses/Async-2025.md @@ -1,156 +1,196 @@ # Асинхронное программирование 2025 -Те способы писать асинхронный код, которые мы использовали 10-15 лет назад безвозвратно уходят в прошлое и могут быть интересны лишь для поддержки легаси упражнения в глубоком понимании асинхронного программирования. Даже способы 5-7 летней давности уже имеют мало общего с современными практиками, но интернет полон устаревшей информации, даже [открытый курс сообщества Metarhia](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md) на сегодняшний момент стал слишком громоздким и излишним. Еще нужно упомянуть о том, что в системном и прикладном коде асинхронное программирование должно выглядеть принципиально по-разному. Полностью скрыть от продуктового разработчика сложность асинхронного кода за абстракциями не удастся, потому, что он в любом случае будет работать с таймерами, событиями, стримами, fetch и другими асинхронными API, но его можно писать в десятки раз проще, чем асинхронный код в системном слое. Что касается системного слоя, то нужно вводить в обиход теорию очередей (системы массового обслуживания), модель акторов, часть абстракций из параллельного программирования (семафоры, рандеву, атомарные операции). Конечно, содержать все это в одном курсе сложновато, поэтому, мы отдадим приоритет прикладному коду и сначала полностью подготовим курс для применения асинхронного программирования в продуктовой разработке, а потом будем добавлять необязательные темы из старого курса и много других полезных абстракций, широко распространенных в других языках программирования, но слабо известных в мире JavaScript. +> Для JavaScrip и TypeScript. 9 часов основных материалов и более 45 часов дополнительных. +> Два языка лекций: русский и украинский. Семинары каждую неделю. Сообщество выпускников более 1200 разработчиков. -## Содержание +🔹 Основной материал можно освоить за 1 месяц, если тратить на это 2-3 часа в неделю. +🔹 Для освоения всего материала в таком темпе нужно примерно 1 год. +🔹 Начинать можно в любое время и двигаться со своей скоростью. +🔹 Все материалы остаются навсегда + Вы получите обновления 2 года. + +![PXL_20231227_190319918 MP](https://github.com/metatech-university/Async-2024/assets/4405297/2d0855a7-18d5-45c2-8fa9-d1e873ba1030) + +Этому курсу уже 15 лет, я обновляю его каждый год и за это время он стал самым крупным и полным сборником знаний про ассинхронное программирование. Интернет полон устаревшими материалами по JavaScript, даже то, как люди писали асинхронный код 5-7 лет назад уже имеет мало общего с современными практиками. В открытом виде есть все материалы, записаные до 2020 года: [открытый курс сообщества Metarhia по асинхронному программированию](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md). Старый курс стал слишком громоздким, но его материалы тоже включены сюда, как дополнительные и исторические, потому, что поддержку легаси никто не отменял. + +🔹 [Обзор контрактов и абстракций](https://youtu.be/tJTK9dWVkbc) +🔹 [Огляд українською асинхронного програмування](https://youtu.be/isyJISjlpE4) +🔹 [Обзор параллельного программирования](https://youtu.be/lxHudbhgfy0) -Важные аспекты нового курса: +Еще нужно упомянуть, что в системном и прикладном коде асинхронное программирование должно выглядеть принципиально по-разному. Полностью скрыть от продуктового разработчика сложность асинхронного кода за абстракциями не получится, потому, что он в любом случае будет работать с таймерами, событиями, стримами, fetch и другими асинхронными API, но его можно писать в десятки раз проще, чем асинхронный код в системном слое. Что касается системного слоя, то нужно вводить в обиход теорию очередей (системы массового обслуживания), модель акторов, часть абстракций из параллельного программирования (семафоры, рандеву, атомарные операции). -- Концентрация на практическом применении (примеры кода из реальных проектов) -- Актуальность и соответствие стандартам по состоянию на 2023-2025 -- Задачи и разбор их решений, семинары, ревью кода (курс это не только видео) -- Рекомендации к выбору стиля и абстракций асинхронности под задачу -- Внимание к корректной обработке ошибок во всех стилях асинхронности -- Упор на надежность, поддерживаемость, тестируемость, снижение зацепления -- Примеры и задачи по исправлению скрытых проблемных состояний и data races +🔹 В 2025 появились новые темы: signals, disposable, web streams, обновлены материалы по паттернам и адаптерам асинхронных контрактов, reactor, proactor, обработка ошибок и др. +🔹 В ближайшее время воявится: `AbortController`, `AbortSignal`, новые возможность Promise, `MessageChannel`, `BroadcastChannel`, обновим лекции по функциональному стилю кода. +🔹 Курс начал получать примеры кода на TypeScript, и этого будет становиться больше в новых лекциях, до конца 2025 TypeScript станет вторым языком курса. -Для того, чтобы писать прикладной код хватит первого столбика таблицы (а в оглавлении темы помечены 💯). Второй столбик полезен, как дополнительные знания, (углубленное изучение помечено как 🧑‍🎓). Для бекенда на ноде нужно освоить два первых столбика. Третий столбик содержит системные вещи (помечены ⚙️ в оглавлении), которые нужны для разработки инструментов, платформ и библиотек. Четвертый столбик (помечен 🧑‍🚀) это дополнительные абстракции, которые можно осваивать выборочно, они понадобятся не всем, но если вы работаете в проектах, где много функционального и/или реактивного программирования. Пятый столбик - вещи, которые морально устарели и могут рассматриваться как интересный антиквариат (помечены ⚠️). +## Краткое содержание -| Applied 💯 | Advanced 🧑‍🎓 | System ⚙️ | Elective 🧑‍🚀 | Legacy ⚠️ | +Для того, чтобы писать прикладной код хватит первого столбика таблицы (а в оглавлении темы помечены 💯). Второй столбик полезен, как дополнительные знания, (углубленное изучение помечено как 🧑‍🎓). Для бекенда на ноде нужно освоить два первых столбика. Третий столбик содержит системные вещи (помечены ⚙️ в оглавлении), которые нужны для разработки инструментов, платформ и библиотек. Четвертый столбик (помечен 🧑‍🚀) это дополнительные абстракции, которые можно осваивать выборочно, они понадобятся не всем, но если вы работаете в проектах, где много функционального и/или реактивного программирования. Пятый столбик - вещи, которые морально устарели и могут рассматриваться как интересный антиквариат (помечены 🕰️). + +| 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` | `GoF pattern Iterator` | `BroadcastChannel` | `coroutines` | | -| `locks` | `Actor pattern` | `threads` | `Actor Model` | | -| `iterators` | `Disposable` | `processes` | `do` | | +| `events` | `Chain of responsibility` | `Spin Lock` | `Future` | `Metasync` | +| `streams` | `Async Generator` | `MessageChannel` | `coroutines` | `middleware` | +| `signals` | `GoF pattern Iterator` | `BroadcastChannel` | `Actor Model` | `RxJS` | +| `locks` | `Actor pattern` | `threads` | `do` | | +| `iterators` | `Disposable` | `processes` | | | + +🔹 Концентрация на практическом применении (примеры кода из реальных проектов) +🔹 Актуальность и соответствие стандартам по состоянию на 2023-2025 +🔹 Задачи и разбор их решений, семинары, ревью кода (курс это не только видео) +🔹 Рекомендации к выбору стиля и абстракций асинхронности под задачу +🔹 Внимание к корректной обработке ошибок во всех стилях асинхронности +🔹 Упор на надежность, поддерживаемость, тестируемость, снижение зацепления +🔹 Примеры и задачи по исправлению скрытых проблемных состояний и data races -Условные обозначения: ⭐ новые лекции, ✨ открытые старые лекции, 💯 обязательные, 🧑‍🎓 продвинутые, ⚙️ системные, 🧑‍🚀 по выбору, ⚠️ устаревшее, 🧩 необязательные темы, 💻 примеры кода, 🧑‍💻 задания +## Содержание - 💯 Контракты асинхронности на базе callback - - ⭐ Контракты `Callback` и `Callback-last-error-first` (ссылка в платном курсе) - - 💻 Колбеки: https://github.com/HowProgrammingWorks/Callbacks - - 💻 Примеры кода с колбеками: https://github.com/HowProgrammingWorks/AsynchronousProgramming - - 🧑‍💻 [Задания по колбекам](https://github.com/HowProgrammingWorks/Callbacks/tree/master/JavaScript/Tasks) (решения, ревью и разбор в платном курсе) + - ⭐ Контракты `Callback` и `Callback-last-error-first` + - 💻 Примеры кода + - 🧑‍💻 Задания по колбекам и созвон с разбором заданий + - 🕰️ Функции высшего порядка, колбеки, события на JavaScript + - 🕰️ Асинхронное программирование на callback`ах в JavaScript + - 💡 V8: оптимизируем возврат из функции в JavaScript через return, resolve, callback — Деми Мурыч - 💯 Минимально необходимое понимание рантайма: event loop, I/O, таймеры - - ⭐ Фазы Event-loop в V8 и Node.js (ссылка в платном курсе) - - 🧩 [Стрим с разбрром Event loop и асинхронности](https://www.youtube.com/live/ND5HNHicACI) - - 💻 Таймеры: https://github.com/HowProgrammingWorks/Timers - - 🧑‍💻 Задания по таймерам (в платном курсе) -- 💯 Контракты на базе событий `EventTarget`, `EventEmitter` - - ⭐ События (ссылка в платном курсе) - - 🧑‍💻 [Задания по событиям](https://github.com/HowProgrammingWorks/Events/tree/main/JavaScript/Tasks) (решения, ревью и разбор в платном курсе) - - ✨ [EventEmitter из старой лекции](https://youtu.be/LK2jveAnRNg) - - 💻 EventEmitter: https://github.com/HowProgrammingWorks/EventEmitter + - ⭐ Фазы Event-loop в V8 и Node.js + - 🗃️ Стрим с разбрром Event loop и асинхронности + - 💻 Примеры кода + - 🧑‍💻 Задания по таймерам + - ✨ Event loop, асинхронность, таймеры, колбеки, промисы, async/await + - 💡 Асинхронное программирования в JavaScript, Node.js: callback, promise, thenable, async/await +- 🧑‍🎓 Паттерны Actor, Reactor, Proactor + - ⭐ Actor + Actor Compose (композиция актора и состояния) + - ⭐ Паттерн Reactor (реактор): как устроен Event Loop в Node.js + - ⭐ Паттерн Proactor + - 💡 Семинар Паттерны Actor, Reactor, Proactor для JavaScript и TypeScript +- 💯 Контракты на базе событий + - ⭐ События: `EventTarget`, `EventEmitter` + - ⭐ GoF Pattern Observer + - 💻 Примеры кода по событиям + - 🧑‍💻 Задания по событиям + - ✨ EventEmitter из старой лекции + - 💻 Примеры кода из старой лекции по EventEmitter + - 💡 Code review: Observable, EventEmitter, EventTarget - 💯 Абстракция потоков `Stream` - - ⭐ Стримы Readable, Writable, Transform, открытый конструктор, буферизация, backpressure (ссылка в платном курсе) - - 🧑‍💻 Задания по стримам (в платном курсе) - - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Streams/tree/master/JavaScript - - ✨ [Паттерн открытый конструктор (Revealing Constructor)](https://youtu.be/leR5sXRkuJI) - - 💻 Примеры кода: https://github.com/HowProgrammingWorks/RevealingConstructor + - ⭐ Стримы Readable, Writable, Transform, открытый конструктор, буферизация, backpressure + - ⭐ Web Streams — браузерное API для потоков событий + - 💻 Примеры кода + - ✨ Паттерн открытый конструктор (Revealing Constructor + - 💻 Примеры кода + - ✨ Потоки (Streams) в Node.js + - ✨ HTTP сервер в Node.js,req, res, сокеты и потоки (streams) - ⚙️ Контракт `Thenable` - - ⭐ Контракт `Thenabe` (ссылка в платном курсе) - - ✨ [Thenable из старой лекции](https://youtu.be/Jdf_tZuJbHI) - - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Thenable - - 🧑‍💻 [Задания по `Thenabe`Thenable](https://github.com/HowProgrammingWorks/Thenable/tree/master/JavaScript/Tasks) (решения, ревью и разбор в платном курсе) + - ⭐ Контракт `Thenabe` + - ✨ Thenable из старой лекции + - ✨ Thenable и легковесный await + - 💻 Примеры кода + - 🧑‍💻 Задания по `Thenabe` и созвон с разбором заданий - 💯 Контракт `Promise` - - ⭐ Promise: then/catch/finally и методы класса all, allSettled, race, any (ссылка в платном курсе) - - ✨ [Асинхронность на промисах из старой лекции](https://youtu.be/RMl4r6s1Y8M) - - 💻 [Примеры кода](https://github.com/HowProgrammingWorks/Promise/tree/master/JavaScript) - - 🧑‍💻 [Задания по `Promise`](https://github.com/HowProgrammingWorks/Promise/tree/master/JavaScript/Tasks) (решения, ревью и разбор в платном курсе) + - ⭐ Promise: then/catch/finally и методы класса all, allSettled, race, any + - ✨ Асинхронность на промисах из старой лекции + - 💻 Примеры кода + - 🧑‍💻 Задания по `Promise` и созвон с разбором заданий - 💯 Контракт асинхронных функций `async/await` - - ⭐ Асинхронные функции (ссылка в платном курсе) - - ✨ [Асинхронные функции из старой лекции](https://youtu.be/Jdf_tZuJbHI) - - 💻 [Примеры кода](https://github.com/HowProgrammingWorks/AsyncFunction/tree/main/JavaScript) - - 🧑‍💻 [Задания по `async/await`](https://github.com/HowProgrammingWorks/AsyncAwait/tree/master/JavaScript/Tasks) (решения, ревью и разбор в платном курсе) -- 💯 Контракт сигналов `signals` - - ⭐ Сигналы (в платном курсе) - - 💻 Примеры кода: (готовятся), будут тут https://github.com/HowProgrammingWorks/Signals - - 🧑‍💻 Задания по сигналам (в платном курсе) + - ⭐ Асинхронные функции + - ✨ Асинхронные функции из старой лекции + - 💻 Примеры кода + - 🧑‍💻 Задания по `async/await` +- 💯 Контракт сигналов `Signals` + - ⭐ Сигналы: signal, computed, effect + - 💻 Примеры кода + - 🧑‍💻 Задания по сигналам - 💯 Обработка ошибок, их выявление и решение проблем со стектрейсом - - ✨ [Обработка ошибок из старой лекции](https://youtu.be/Jdf_tZuJbHI) + - ⭐ Обработка ошибок, логирование и аггрегирование + - ⭐ Семинар: Errors, exceptions, operational, soft, hard, recovery, logging + - 💡 Реализация `Graceful shutdown` в Node.js, `unhandled exceptions`, `async stack trace` + - ✨ Обработка ошибок из старой лекции - 💻 Примеры кода - - 💻 Примеры кода из старого курса: https://github.com/HowProgrammingWorks/AsyncAwait - - 💻 Примеры кода: (готовятся), будут тут https://github.com/HowProgrammingWorks/AsyncErrorHandling - 🧑‍💻 Задания по обработке ошибок -- 🧑‍🎓 Контракт `Disposable` - - ⭐ Явное управление ресурсами (Explicit Resource Management) - - ⭐ Подсчет ссылок и освобождение ресурсов на базе `Disposable` - - ⭐ Реализация концепции `Ownership` на базе `Disposable` - 🧑‍🎓 Асинхронная очередь `AsyncQueue` - - ⭐ Асинхронная очередь (в платном курсе) - - ✨ Конкурентная асинхронная очередь из старой лекции](https://youtu.be/Lg46AH8wFvg) - - 💻 Примеры кода: https://github.com/HowProgrammingWorks/ConcurrentQueue - - 💻 Примеры кода: (готовятся), будут тут https://github.com/HowProgrammingWorks/AsyncQueue + - 💡 Семинар: Асинхронная очередь — AsyncQueue, ConcurrentQueue + - 💡 Node.js Queue optimized for JavaScript V8: Circular Buffer, Unrolled List, Unrolled Queue + - ✨ Конкурентная асинхронная очередь из старой лекции + - 💻 Примеры кода - 🧑‍🎓 Асинхронный пул `AsyncPool` - - ✨ [Асинхронный пул для worker thread pool в Node.js](https://youtu.be/Jj5KZRq4wYI) - - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Pool - - 💻 Примеры кода: (готовятся), будут тут https://github.com/HowProgrammingWorks/AsyncPool + - ⭐ Паттерн Factory Method + - ⭐ Паттерны: Object Pool, Factory + - ⭐ Асинхронный Pool + - 💡 Семинар: Creator, Factory, Factory Method, Object Pool + - ✨ Асинхронный пул для worker thread pool в Node.js + - ✨ Фабрики и пулы объектов в JavaScript, factorify, poolify + - 💻 Примеры кода - 🧑‍🎓 Асинхронная коллекция `Collector` - - 🧩 Асинхронные коллекции (собираем значения до готовности) - - ✨ [Асинхронные коллекторы данных](https://youtu.be/tgodt1JL6II) - - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Collector -- 🧑‍🎓 Паттерн цепочка ответственности `Chain of responsibility` - - 💻 Примеры кода: (готовятся), будут тут https://github.com/HowProgrammingWorks/ChainOfResponsibility + - ⭐ Асинхронные коллекции (собираем значения до готовности) + - ✨ Асинхронные коллекторы данных + - 💻 Примеры кода +- 🧑‍🎓 Паттерн "цепочка ответственности" + - ⭐ Pattern: Chain of responsibility + - 💻 Примеры кода - 🧑‍🎓 Конвертеры контрактов `asyncify`, `callbackify`, стыковка кода в разных стилях - - ⭐ Асинхронные адаптеры (в платном курсе) - - ✨ [Асинхронные адаптеры из старой лекции](https://youtu.be/76k6_YkYRmU) - - 💻 Примеры кода: https://github.com/HowProgrammingWorks/AsyncAdapter - - 🧑‍💻 Задания по адаптерам (в платном курсе) -- 🧑‍🎓 Предотвращение состояния гонки по данным и управлению в асинхронном коде (в платном курсе) -- 🧑‍🎓 Отмена асинхронных операций: `AbortController`, `AbortSignal` (в платном курсе) - - 🧩 Документация на MDN: https://developer.mozilla.org/en-US/docs/Web/API/AbortController -- 🧑‍🎓 `Async Generator` и `Async Iterator` (в платном курсе) - - ✨ [Генераторы и асинхронные генераторы из старой лекции](https://youtu.be/kvNm9D32s8s) + - ⭐ GoF Patterns: Adapter + - ⭐ Асинхронные адаптеры + - 💡 Семинар по адаптерам для Node.js и асинхронного программирования + - 💡 Node.js ревью кода promisify — Тимур Шемсединов и Деми Мурыч + - ✨ Асинхронные адаптеры из старой лекции + - 💻 Примеры кода +- 🧑‍🎓 Предотвращение состояния гонки по данным и управлению в асинхронном коде +- 🧑‍🎓 Отмена асинхронных операций + - ⭐ AbortController, AbortSignal + - 💻 Примеры кода +- 🧑‍🎓 `Async Generator` и `Async Iterator` + - ⭐ Generator, iterator, iterable + - ⭐ Async generator, Async iterator, Async iterable + - ✨ Генераторы и асинхронные генераторы из старой лекции + - ✨ Итераторы и асинхронные итераторы из старой лекции + - 💻 Примеры кода - ⚙️ Абстракции портированные из параллельного программирования в асинхронное - - 🧩 Асинхронные абстракции: `Semaphore`, `Mutex` - - 🧩 Блокировки `Lock`, `Spin Lock` -- ⚙️ Абстракции параллельного программирования - - 🧩 Системные абстракции: `threads`, `processes` - - 🧩 Межпроцессовое и межпотоковое взаимодействие, `MessageChannel`, `BroadcastChannel` - - 🧩 Корутины `coroutines` -- 🧑‍🎓 Асинхронные генераторы и асинхронные итераторы - - ✨ [Генераторы и асинхронные генераторы из старой лекции](https://youtu.be/kvNm9D32s8s) - - 💻 Генераторы: https://github.com/HowProgrammingWorks/Generator - - 💻 Асинхронные генераторы: https://github.com/HowProgrammingWorks/AsyncGenerator - - ✨ [Итераторы и асинхронные итераторы из старой лекции](https://youtu.be/rBGFlWpVpGs) - - 💻 Итераторы: https://github.com/HowProgrammingWorks/Iterator - - 💻 Асинхронные итераторы: https://github.com/HowProgrammingWorks/AsyncIterator -- 🧑‍🚀 Композиция функций на колбеках `compose callbacks` - - ✨ [Асинхронная композиция функций](https://youtu.be/3ZCrMlMpOrM) - - 💻 Примеры кода: https://github.com/HowProgrammingWorks/AsyncCompose -- 🧑‍🚀 Композиция асинхронных функций `async compose` - - 💻 Примеры кода: https://github.com/HowProgrammingWorks/AsyncCompose + - ✨ Семафоры и мьютексы в JavaScript и Node.js + - 💻 Асинхронные абстракции: `Semaphore`, `Mutex` + - 💻 Блокировки WebLocks API + - 💻 Блокировки `Lock`, `Spin Lock` +- ⚙️ Абстракции параллельного программирования: процессы и потоки + - ⭐ Многопоточность в Node.js + - ⭐ Web Locks API in Node.js and browser + - ⭐ Потоки и процессы в JavaScript, асинхронное и параллельное программирование на Node.js и в браузере + - ⭐ Потоки та процеси українською для Web та Node.js, Atomics/CAS, шарена пам'ять, блокування + - ✨ Межпроцессовое взаимодействие в Node.js + - ⭐ Межпроцессовое и межпотоковое взаимодействие, `MessageChannel`, `BroadcastChannel` + - ⭐ Корутины `coroutines` +- 🧑‍🚀 Асинхронная композиция `compose callbacks` & `async compose` + - ⭐ Асинхронная композиция: compose, pipe — функциональное программирование + - ✨ Асинхронная композиция функций + - 💻 Примеры кода - 🧑‍🚀 Асинхронность на потоках событий `RxJS` - - ✨ Потоки событий, паттерн `Observer/Observable` - - ✨ [Асинхронность на RxJS из старой лекции](https://youtu.be/0kcpMAl-wfE) - - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Rx + - ✨ Асинхронность на RxJS из старой лекции + - 💻 Примеры кода - 🧑‍🚀 Модель акторов `actor model` - - ✨ [Модель акторов](https://youtu.be/xp5MVKEqxY4) - - 💻 Примеры кода: https://github.com/HowProgrammingWorks/ActorModel -- 🧑‍🚀 Библиотека `do`: https://www.npmjs.com/package/do + - ✨ Модель акторов + - 💻 Примеры кода - 🧑‍🚀 Функциональное асинхронное программирование, контракт `Future` - - ✨ [Асинхронность на фьючерах без состояния](https://youtu.be/22ONv3AGXdk) - - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Future -- ⚠️ Асинхронность на синхронных генераторах `function*/yield` -- ⚠️ Мидлвары `middleware` как антипаттерн: https://youtu.be/RS8x73z4csI - - 💻 Примеры кода: (готовятся), будут тут https://github.com/HowProgrammingWorks/Middleware -- ⚠️ Контракты семейства `Deferred` - - ✨ [Deferred: Асинхронность на диферах с состоянием](https://youtu.be/a2fVA1o-ovM) - - 💻 Примеры кода: https://github.com/HowProgrammingWorks/Deferred -- ⚠️ Async.js - - 🧩 [Легаси код на библиотеке `Async.js`](https://youtu.be/XQ94wQc-erU) - - 💻 Примеры кода: https://github.com/HowProgrammingWorks/AsynchronousProgramming -- ⚠️ Коллекция асинхронных абстракций `Metasync`: https://www.npmjs.com/package/metasync - - ✨ [Архивная лекция](https://youtu.be/xNfOv9I1MDk) + - ⭐ FP Async Pattern — Future + - ✨ Асинхронность на фьючерах без состояния + - 💻 Примеры кода +- 🕰️ Асинхронность на синхронных генераторах `function*/yield` +- 🕰️ Мидлвары `middleware` как антипаттерн + - ✨ Node.js Middleware – никогда больше! + - 💻 Примеры кода +- 🕰️ Контракты семейства `Deferred` + - ✨ Deferred: Асинхронность на диферах с состоянием + - 💻 Примеры кода +- 🕰️ Async.js + - ✨ Легаси код на библиотеке `Async.js` + - 💻 Примеры кода +- 🕰️ Коллекция асинхронных абстракций `Metasync` - ⚙️ Трекинг асинхронных контекстов - - ⭐ AsyncLocalStorage, AsyncResource (в платном курсе) - - 💻 Примеры использования AsyncLocalStorage и AsyncResource: https://github.com/HowProgrammingWorks/AsyncContextTracking -- ⚙️ Процессы и потоки - - 🧩 [Многопоточность в Node.js](https://youtu.be/VNXga8zomrY) - - 🧩 [Web Locks API in Node.js and browser](https://youtu.be/auMM-uV12F0) + - ⭐ AsyncLocalStorage, AsyncResource + - 💻 Примеры использования AsyncLocalStorage и AsyncResource +- ⭐ Принципы и паттерны с адаптацией для JavaScript, TypeScript, Node.js и асинхронного программирования + - 💡 Принципы SOLID + - 💡 Паттерны GRASP + - ✨ Контрактное программирование ## Обратите внимание From aa4a9a34dc6cb2c78441bde1d3eef1a99cbdb066 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 9 Jul 2025 05:50:40 -0400 Subject: [PATCH 187/217] Update Async-2025.md --- Courses/Async-2025.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Courses/Async-2025.md b/Courses/Async-2025.md index aedf560..8ab393b 100644 --- a/Courses/Async-2025.md +++ b/Courses/Async-2025.md @@ -3,24 +3,25 @@ > Для JavaScrip и TypeScript. 9 часов основных материалов и более 45 часов дополнительных. > Два языка лекций: русский и украинский. Семинары каждую неделю. Сообщество выпускников более 1200 разработчиков. -🔹 Основной материал можно освоить за 1 месяц, если тратить на это 2-3 часа в неделю. -🔹 Для освоения всего материала в таком темпе нужно примерно 1 год. -🔹 Начинать можно в любое время и двигаться со своей скоростью. -🔹 Все материалы остаются навсегда + Вы получите обновления 2 года. +🕑 Основной материал можно освоить за 1 месяц, если тратить на это 2-3 часа в неделю. +🗓️ Для освоения всего материала в таком темпе нужно примерно 1 год. +🏃‍♂️‍➡️ Начинать можно в любое время и двигаться со своей скоростью. +👍 Все материалы остаются навсегда + Вы получите обновления 2 года. ![PXL_20231227_190319918 MP](https://github.com/metatech-university/Async-2024/assets/4405297/2d0855a7-18d5-45c2-8fa9-d1e873ba1030) Этому курсу уже 15 лет, я обновляю его каждый год и за это время он стал самым крупным и полным сборником знаний про ассинхронное программирование. Интернет полон устаревшими материалами по JavaScript, даже то, как люди писали асинхронный код 5-7 лет назад уже имеет мало общего с современными практиками. В открытом виде есть все материалы, записаные до 2020 года: [открытый курс сообщества Metarhia по асинхронному программированию](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md). Старый курс стал слишком громоздким, но его материалы тоже включены сюда, как дополнительные и исторические, потому, что поддержку легаси никто не отменял. -🔹 [Обзор контрактов и абстракций](https://youtu.be/tJTK9dWVkbc) -🔹 [Огляд українською асинхронного програмування](https://youtu.be/isyJISjlpE4) -🔹 [Обзор параллельного программирования](https://youtu.be/lxHudbhgfy0) +👉 [Обзор контрактов и абстракций](https://youtu.be/tJTK9dWVkbc) +👉 [Огляд українською асинхронного програмування](https://youtu.be/isyJISjlpE4) +👉 [Обзор параллельного программирования](https://youtu.be/lxHudbhgfy0) Еще нужно упомянуть, что в системном и прикладном коде асинхронное программирование должно выглядеть принципиально по-разному. Полностью скрыть от продуктового разработчика сложность асинхронного кода за абстракциями не получится, потому, что он в любом случае будет работать с таймерами, событиями, стримами, fetch и другими асинхронными API, но его можно писать в десятки раз проще, чем асинхронный код в системном слое. Что касается системного слоя, то нужно вводить в обиход теорию очередей (системы массового обслуживания), модель акторов, часть абстракций из параллельного программирования (семафоры, рандеву, атомарные операции). 🔹 В 2025 появились новые темы: signals, disposable, web streams, обновлены материалы по паттернам и адаптерам асинхронных контрактов, reactor, proactor, обработка ошибок и др. 🔹 В ближайшее время воявится: `AbortController`, `AbortSignal`, новые возможность Promise, `MessageChannel`, `BroadcastChannel`, обновим лекции по функциональному стилю кода. 🔹 Курс начал получать примеры кода на TypeScript, и этого будет становиться больше в новых лекциях, до конца 2025 TypeScript станет вторым языком курса. +🔹 Каждый год курс обновляется, чем больше людей будет на курсе, тем больше будет появляться материалов, практических примеров, заданий, стримов и докладов, больше R&D. ## Краткое содержание @@ -204,7 +205,8 @@ ## Как попасть на курс -🎫 Регистрация: следите за публикациями чтобы не пропустить начало регистрации. +🎫 До 12 июля (включительно) 2024 можно купить курс за $200: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC +🎫 C 12 июля стоимость будет $250: https://www.paypal.com/ncp/payment/CCEPK9DWYPWM8 👉 Новости курса будут в канале: https://t.me/asyncify 👉 Открытая группа курса: https://t.me/asynctalks From 3fbd10439833dbda87c633bd4350766f3017d027 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 9 Jul 2025 05:56:31 -0400 Subject: [PATCH 188/217] Update Async-2025.md --- Courses/Async-2025.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Courses/Async-2025.md b/Courses/Async-2025.md index 8ab393b..fdcae91 100644 --- a/Courses/Async-2025.md +++ b/Courses/Async-2025.md @@ -7,6 +7,7 @@ 🗓️ Для освоения всего материала в таком темпе нужно примерно 1 год. 🏃‍♂️‍➡️ Начинать можно в любое время и двигаться со своей скоростью. 👍 Все материалы остаются навсегда + Вы получите обновления 2 года. +🎫 До 12 июля (включительно) 2024 можно купить курс за $200: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC ![PXL_20231227_190319918 MP](https://github.com/metatech-university/Async-2024/assets/4405297/2d0855a7-18d5-45c2-8fa9-d1e873ba1030) @@ -23,6 +24,8 @@ 🔹 Курс начал получать примеры кода на TypeScript, и этого будет становиться больше в новых лекциях, до конца 2025 TypeScript станет вторым языком курса. 🔹 Каждый год курс обновляется, чем больше людей будет на курсе, тем больше будет появляться материалов, практических примеров, заданий, стримов и докладов, больше R&D. +🎫 До 12 июля (включительно) 2024 можно купить курс за $200: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC + ## Краткое содержание Для того, чтобы писать прикладной код хватит первого столбика таблицы (а в оглавлении темы помечены 💯). Второй столбик полезен, как дополнительные знания, (углубленное изучение помечено как 🧑‍🎓). Для бекенда на ноде нужно освоить два первых столбика. Третий столбик содержит системные вещи (помечены ⚙️ в оглавлении), которые нужны для разработки инструментов, платформ и библиотек. Четвертый столбик (помечен 🧑‍🚀) это дополнительные абстракции, которые можно осваивать выборочно, они понадобятся не всем, но если вы работаете в проектах, где много функционального и/или реактивного программирования. Пятый столбик - вещи, которые морально устарели и могут рассматриваться как интересный антиквариат (помечены 🕰️). @@ -46,6 +49,8 @@ 🔹 Упор на надежность, поддерживаемость, тестируемость, снижение зацепления 🔹 Примеры и задачи по исправлению скрытых проблемных состояний и data races +🎫 До 12 июля (включительно) 2024 можно купить курс за $200: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC + ## Содержание - 💯 Контракты асинхронности на базе callback From d583adbd3be473b39f54ac1d699c253d6636545c Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 9 Jul 2025 06:14:32 -0400 Subject: [PATCH 189/217] Fix year --- Courses/Async-2025.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Courses/Async-2025.md b/Courses/Async-2025.md index fdcae91..df65caf 100644 --- a/Courses/Async-2025.md +++ b/Courses/Async-2025.md @@ -7,7 +7,7 @@ 🗓️ Для освоения всего материала в таком темпе нужно примерно 1 год. 🏃‍♂️‍➡️ Начинать можно в любое время и двигаться со своей скоростью. 👍 Все материалы остаются навсегда + Вы получите обновления 2 года. -🎫 До 12 июля (включительно) 2024 можно купить курс за $200: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC +🎫 До 12 июля (включительно) 2025 можно купить курс за $200: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC ![PXL_20231227_190319918 MP](https://github.com/metatech-university/Async-2024/assets/4405297/2d0855a7-18d5-45c2-8fa9-d1e873ba1030) @@ -24,7 +24,7 @@ 🔹 Курс начал получать примеры кода на TypeScript, и этого будет становиться больше в новых лекциях, до конца 2025 TypeScript станет вторым языком курса. 🔹 Каждый год курс обновляется, чем больше людей будет на курсе, тем больше будет появляться материалов, практических примеров, заданий, стримов и докладов, больше R&D. -🎫 До 12 июля (включительно) 2024 можно купить курс за $200: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC +🎫 До 12 июля (включительно) 2025 можно купить курс за $200: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC ## Краткое содержание @@ -49,7 +49,7 @@ 🔹 Упор на надежность, поддерживаемость, тестируемость, снижение зацепления 🔹 Примеры и задачи по исправлению скрытых проблемных состояний и data races -🎫 До 12 июля (включительно) 2024 можно купить курс за $200: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC +🎫 До 12 июля (включительно) 2025 можно купить курс за $200: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC ## Содержание @@ -210,8 +210,8 @@ ## Как попасть на курс -🎫 До 12 июля (включительно) 2024 можно купить курс за $200: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC -🎫 C 12 июля стоимость будет $250: https://www.paypal.com/ncp/payment/CCEPK9DWYPWM8 +🎫 До 12 июля (включительно) 2025 можно купить курс за $200: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC +🎫 C 12 июля 2025 стоимость будет $250: https://www.paypal.com/ncp/payment/CCEPK9DWYPWM8 👉 Новости курса будут в канале: https://t.me/asyncify 👉 Открытая группа курса: https://t.me/asynctalks From 20acac05229c74da66933a46c0f0c25ea19d73da Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 9 Jul 2025 12:36:22 -0400 Subject: [PATCH 190/217] Update Async-2025.md --- Courses/Async-2025.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Courses/Async-2025.md b/Courses/Async-2025.md index df65caf..ea16fe7 100644 --- a/Courses/Async-2025.md +++ b/Courses/Async-2025.md @@ -8,6 +8,7 @@ 🏃‍♂️‍➡️ Начинать можно в любое время и двигаться со своей скоростью. 👍 Все материалы остаются навсегда + Вы получите обновления 2 года. 🎫 До 12 июля (включительно) 2025 можно купить курс за $200: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC +🎫 Или купить на Paypal тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 ![PXL_20231227_190319918 MP](https://github.com/metatech-university/Async-2024/assets/4405297/2d0855a7-18d5-45c2-8fa9-d1e873ba1030) @@ -25,6 +26,7 @@ 🔹 Каждый год курс обновляется, чем больше людей будет на курсе, тем больше будет появляться материалов, практических примеров, заданий, стримов и докладов, больше R&D. 🎫 До 12 июля (включительно) 2025 можно купить курс за $200: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC +🎫 Или купить на Paypal тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 ## Краткое содержание @@ -50,6 +52,7 @@ 🔹 Примеры и задачи по исправлению скрытых проблемных состояний и data races 🎫 До 12 июля (включительно) 2025 можно купить курс за $200: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC +🎫 Или купить на Paypal тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 ## Содержание @@ -211,6 +214,7 @@ ## Как попасть на курс 🎫 До 12 июля (включительно) 2025 можно купить курс за $200: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC +🎫 Или купить на Paypal тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 🎫 C 12 июля 2025 стоимость будет $250: https://www.paypal.com/ncp/payment/CCEPK9DWYPWM8 👉 Новости курса будут в канале: https://t.me/asyncify From 18225ec02c29e52f89e806b295bbe69e7782f2a9 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 9 Jul 2025 12:37:23 -0400 Subject: [PATCH 191/217] Update Async-2025.md --- Courses/Async-2025.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Courses/Async-2025.md b/Courses/Async-2025.md index ea16fe7..4434c9b 100644 --- a/Courses/Async-2025.md +++ b/Courses/Async-2025.md @@ -7,8 +7,8 @@ 🗓️ Для освоения всего материала в таком темпе нужно примерно 1 год. 🏃‍♂️‍➡️ Начинать можно в любое время и двигаться со своей скоростью. 👍 Все материалы остаются навсегда + Вы получите обновления 2 года. -🎫 До 12 июля (включительно) 2025 можно купить курс за $200: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC -🎫 Или купить на Paypal тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 +🎫 До 12 июля (включительно) 2025 можно купить курс за $200 через Paypal: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC +🎫 Или купить на Payoneer тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 ![PXL_20231227_190319918 MP](https://github.com/metatech-university/Async-2024/assets/4405297/2d0855a7-18d5-45c2-8fa9-d1e873ba1030) @@ -25,8 +25,8 @@ 🔹 Курс начал получать примеры кода на TypeScript, и этого будет становиться больше в новых лекциях, до конца 2025 TypeScript станет вторым языком курса. 🔹 Каждый год курс обновляется, чем больше людей будет на курсе, тем больше будет появляться материалов, практических примеров, заданий, стримов и докладов, больше R&D. -🎫 До 12 июля (включительно) 2025 можно купить курс за $200: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC -🎫 Или купить на Paypal тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 +🎫 До 12 июля (включительно) 2025 можно купить курс за $200 через Paypal: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC +🎫 Или купить на Payoneer тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 ## Краткое содержание @@ -51,8 +51,8 @@ 🔹 Упор на надежность, поддерживаемость, тестируемость, снижение зацепления 🔹 Примеры и задачи по исправлению скрытых проблемных состояний и data races -🎫 До 12 июля (включительно) 2025 можно купить курс за $200: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC -🎫 Или купить на Paypal тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 +🎫 До 12 июля (включительно) 2025 можно купить курс за $200 через Paypal: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC +🎫 Или купить на Payoneer тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 ## Содержание @@ -213,8 +213,8 @@ ## Как попасть на курс -🎫 До 12 июля (включительно) 2025 можно купить курс за $200: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC -🎫 Или купить на Paypal тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 +🎫 До 12 июля (включительно) 2025 можно купить курс за $200 через Paypal: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC +🎫 Или купить на Payoneer тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 🎫 C 12 июля 2025 стоимость будет $250: https://www.paypal.com/ncp/payment/CCEPK9DWYPWM8 👉 Новости курса будут в канале: https://t.me/asyncify From 50db8015ac0c387d8a67d4309313d8bb258e55fd Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 9 Jul 2025 12:38:19 -0400 Subject: [PATCH 192/217] Update Async-2025.md --- Courses/Async-2025.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Courses/Async-2025.md b/Courses/Async-2025.md index 4434c9b..acf2a88 100644 --- a/Courses/Async-2025.md +++ b/Courses/Async-2025.md @@ -7,7 +7,7 @@ 🗓️ Для освоения всего материала в таком темпе нужно примерно 1 год. 🏃‍♂️‍➡️ Начинать можно в любое время и двигаться со своей скоростью. 👍 Все материалы остаются навсегда + Вы получите обновления 2 года. -🎫 До 12 июля (включительно) 2025 можно купить курс за $200 через Paypal: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC +🎫 До 12 июля (включительно) можно купить за $200 через Paypal: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC 🎫 Или купить на Payoneer тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 ![PXL_20231227_190319918 MP](https://github.com/metatech-university/Async-2024/assets/4405297/2d0855a7-18d5-45c2-8fa9-d1e873ba1030) @@ -25,7 +25,7 @@ 🔹 Курс начал получать примеры кода на TypeScript, и этого будет становиться больше в новых лекциях, до конца 2025 TypeScript станет вторым языком курса. 🔹 Каждый год курс обновляется, чем больше людей будет на курсе, тем больше будет появляться материалов, практических примеров, заданий, стримов и докладов, больше R&D. -🎫 До 12 июля (включительно) 2025 можно купить курс за $200 через Paypal: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC +🎫 До 12 июля (включительно) можно купить за $200 через Paypal: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC 🎫 Или купить на Payoneer тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 ## Краткое содержание @@ -51,7 +51,7 @@ 🔹 Упор на надежность, поддерживаемость, тестируемость, снижение зацепления 🔹 Примеры и задачи по исправлению скрытых проблемных состояний и data races -🎫 До 12 июля (включительно) 2025 можно купить курс за $200 через Paypal: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC +🎫 До 12 июля (включительно) можно купить за $200 через Paypal: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC 🎫 Или купить на Payoneer тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 ## Содержание @@ -213,7 +213,7 @@ ## Как попасть на курс -🎫 До 12 июля (включительно) 2025 можно купить курс за $200 через Paypal: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC +🎫 До 12 июля (включительно) можно купить за $200 через Paypal: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC 🎫 Или купить на Payoneer тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 🎫 C 12 июля 2025 стоимость будет $250: https://www.paypal.com/ncp/payment/CCEPK9DWYPWM8 From d92b95397a29641e8f567ed3c36799d4985c2bc9 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 9 Jul 2025 13:50:41 -0400 Subject: [PATCH 193/217] Update Async-2025.md --- Courses/Async-2025.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Courses/Async-2025.md b/Courses/Async-2025.md index acf2a88..aa629e7 100644 --- a/Courses/Async-2025.md +++ b/Courses/Async-2025.md @@ -8,13 +8,13 @@ 🏃‍♂️‍➡️ Начинать можно в любое время и двигаться со своей скоростью. 👍 Все материалы остаются навсегда + Вы получите обновления 2 года. 🎫 До 12 июля (включительно) можно купить за $200 через Paypal: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC -🎫 Или купить на Payoneer тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 +🎫 Или купить на Patreon тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 ![PXL_20231227_190319918 MP](https://github.com/metatech-university/Async-2024/assets/4405297/2d0855a7-18d5-45c2-8fa9-d1e873ba1030) Этому курсу уже 15 лет, я обновляю его каждый год и за это время он стал самым крупным и полным сборником знаний про ассинхронное программирование. Интернет полон устаревшими материалами по JavaScript, даже то, как люди писали асинхронный код 5-7 лет назад уже имеет мало общего с современными практиками. В открытом виде есть все материалы, записаные до 2020 года: [открытый курс сообщества Metarhia по асинхронному программированию](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md). Старый курс стал слишком громоздким, но его материалы тоже включены сюда, как дополнительные и исторические, потому, что поддержку легаси никто не отменял. -👉 [Обзор контрактов и абстракций](https://youtu.be/tJTK9dWVkbc) +👉 [Обзор контрактов и абстракций](https://youtube.com/live/dUTXJX37AEE) 👉 [Огляд українською асинхронного програмування](https://youtu.be/isyJISjlpE4) 👉 [Обзор параллельного программирования](https://youtu.be/lxHudbhgfy0) @@ -26,7 +26,7 @@ 🔹 Каждый год курс обновляется, чем больше людей будет на курсе, тем больше будет появляться материалов, практических примеров, заданий, стримов и докладов, больше R&D. 🎫 До 12 июля (включительно) можно купить за $200 через Paypal: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC -🎫 Или купить на Payoneer тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 +🎫 Или купить на Patreon тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 ## Краткое содержание @@ -52,7 +52,7 @@ 🔹 Примеры и задачи по исправлению скрытых проблемных состояний и data races 🎫 До 12 июля (включительно) можно купить за $200 через Paypal: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC -🎫 Или купить на Payoneer тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 +🎫 Или купить на Patreon тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 ## Содержание @@ -214,7 +214,7 @@ ## Как попасть на курс 🎫 До 12 июля (включительно) можно купить за $200 через Paypal: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC -🎫 Или купить на Payoneer тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 +🎫 Или купить на Patreon тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 🎫 C 12 июля 2025 стоимость будет $250: https://www.paypal.com/ncp/payment/CCEPK9DWYPWM8 👉 Новости курса будут в канале: https://t.me/asyncify From 9bfbc64f28fba86fbfb0969e3d4a3c755eef7bea Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 10 Jul 2025 04:03:24 -0400 Subject: [PATCH 194/217] Update Async-2025.md --- Courses/Async-2025.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Courses/Async-2025.md b/Courses/Async-2025.md index aa629e7..49e77b9 100644 --- a/Courses/Async-2025.md +++ b/Courses/Async-2025.md @@ -7,8 +7,8 @@ 🗓️ Для освоения всего материала в таком темпе нужно примерно 1 год. 🏃‍♂️‍➡️ Начинать можно в любое время и двигаться со своей скоростью. 👍 Все материалы остаются навсегда + Вы получите обновления 2 года. -🎫 До 12 июля (включительно) можно купить за $200 через Paypal: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC -🎫 Или купить на Patreon тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 +🎫 До 12 июля (включительно) можно купить за $200 на Patreon: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 +🎫 Или купить через Paypal тоже $200 до 12 июля: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC ![PXL_20231227_190319918 MP](https://github.com/metatech-university/Async-2024/assets/4405297/2d0855a7-18d5-45c2-8fa9-d1e873ba1030) @@ -25,8 +25,8 @@ 🔹 Курс начал получать примеры кода на TypeScript, и этого будет становиться больше в новых лекциях, до конца 2025 TypeScript станет вторым языком курса. 🔹 Каждый год курс обновляется, чем больше людей будет на курсе, тем больше будет появляться материалов, практических примеров, заданий, стримов и докладов, больше R&D. -🎫 До 12 июля (включительно) можно купить за $200 через Paypal: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC -🎫 Или купить на Patreon тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 +🎫 До 12 июля (включительно) можно купить за $200 на Patreon: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 +🎫 Или купить через Paypal тоже $200 до 12 июля: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC ## Краткое содержание @@ -51,8 +51,8 @@ 🔹 Упор на надежность, поддерживаемость, тестируемость, снижение зацепления 🔹 Примеры и задачи по исправлению скрытых проблемных состояний и data races -🎫 До 12 июля (включительно) можно купить за $200 через Paypal: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC -🎫 Или купить на Patreon тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 +🎫 До 12 июля (включительно) можно купить за $200 на Patreon: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 +🎫 Или купить через Paypal тоже $200 до 12 июля: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC ## Содержание @@ -213,9 +213,9 @@ ## Как попасть на курс -🎫 До 12 июля (включительно) можно купить за $200 через Paypal: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC -🎫 Или купить на Patreon тоже $200 до 12 июля: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 -🎫 C 12 июля 2025 стоимость будет $250: https://www.paypal.com/ncp/payment/CCEPK9DWYPWM8 +🎫 До 12 июля (включительно) можно купить за $200 на Patreon: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 +🎫 Или купить через Paypal тоже $200 до 12 июля: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC +🎫 C 12 июля 2025 стоимость будет $250 👉 Новости курса будут в канале: https://t.me/asyncify 👉 Открытая группа курса: https://t.me/asynctalks From 2c021ede512d4e727246dd3c959adf33268f5abf Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 12 Jul 2025 10:19:22 -0400 Subject: [PATCH 195/217] Update Async-2025.md --- Courses/Async-2025.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Courses/Async-2025.md b/Courses/Async-2025.md index 49e77b9..89a8520 100644 --- a/Courses/Async-2025.md +++ b/Courses/Async-2025.md @@ -8,7 +8,8 @@ 🏃‍♂️‍➡️ Начинать можно в любое время и двигаться со своей скоростью. 👍 Все материалы остаются навсегда + Вы получите обновления 2 года. 🎫 До 12 июля (включительно) можно купить за $200 на Patreon: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 -🎫 Или купить через Paypal тоже $200 до 12 июля: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC +🎫 Можно купить через Paypal или Payoneer $200 до 12 июля (включительно): `timur.shemsedinov@gmail.com` + ![PXL_20231227_190319918 MP](https://github.com/metatech-university/Async-2024/assets/4405297/2d0855a7-18d5-45c2-8fa9-d1e873ba1030) @@ -26,7 +27,7 @@ 🔹 Каждый год курс обновляется, чем больше людей будет на курсе, тем больше будет появляться материалов, практических примеров, заданий, стримов и докладов, больше R&D. 🎫 До 12 июля (включительно) можно купить за $200 на Patreon: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 -🎫 Или купить через Paypal тоже $200 до 12 июля: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC +🎫 Можно купить через Paypal или Payoneer $200 до 12 июля (включительно): `timur.shemsedinov@gmail.com` ## Краткое содержание @@ -52,7 +53,7 @@ 🔹 Примеры и задачи по исправлению скрытых проблемных состояний и data races 🎫 До 12 июля (включительно) можно купить за $200 на Patreon: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 -🎫 Или купить через Paypal тоже $200 до 12 июля: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC +🎫 Можно купить через Paypal или Payoneer $200 до 12 июля (включительно): `timur.shemsedinov@gmail.com` ## Содержание @@ -214,7 +215,7 @@ ## Как попасть на курс 🎫 До 12 июля (включительно) можно купить за $200 на Patreon: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 -🎫 Или купить через Paypal тоже $200 до 12 июля: https://www.paypal.com/ncp/payment/Z95CV4VKRHAHC +🎫 Можно купить через Paypal или Payoneer $200 до 12 июля (включительно): `timur.shemsedinov@gmail.com` 🎫 C 12 июля 2025 стоимость будет $250 👉 Новости курса будут в канале: https://t.me/asyncify From ba5ed557a0ebc4962026f82a2547c4d156d7f066 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 13 Jul 2025 09:02:55 -0400 Subject: [PATCH 196/217] Update Async-2025.md --- Courses/Async-2025.md | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/Courses/Async-2025.md b/Courses/Async-2025.md index 89a8520..82efd20 100644 --- a/Courses/Async-2025.md +++ b/Courses/Async-2025.md @@ -7,9 +7,8 @@ 🗓️ Для освоения всего материала в таком темпе нужно примерно 1 год. 🏃‍♂️‍➡️ Начинать можно в любое время и двигаться со своей скоростью. 👍 Все материалы остаются навсегда + Вы получите обновления 2 года. -🎫 До 12 июля (включительно) можно купить за $200 на Patreon: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 -🎫 Можно купить через Paypal или Payoneer $200 до 12 июля (включительно): `timur.shemsedinov@gmail.com` - +🎫 До 25 июля (включительно) можно купить за $250 на Patreon: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 +🎫 Можно купить через Paypal или Payoneer $250 до 25 июля (включительно): `timur.shemsedinov@gmail.com` ![PXL_20231227_190319918 MP](https://github.com/metatech-university/Async-2024/assets/4405297/2d0855a7-18d5-45c2-8fa9-d1e873ba1030) @@ -26,8 +25,8 @@ 🔹 Курс начал получать примеры кода на TypeScript, и этого будет становиться больше в новых лекциях, до конца 2025 TypeScript станет вторым языком курса. 🔹 Каждый год курс обновляется, чем больше людей будет на курсе, тем больше будет появляться материалов, практических примеров, заданий, стримов и докладов, больше R&D. -🎫 До 12 июля (включительно) можно купить за $200 на Patreon: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 -🎫 Можно купить через Paypal или Payoneer $200 до 12 июля (включительно): `timur.shemsedinov@gmail.com` +🎫 До 25 июля (включительно) можно купить за $250 на Patreon: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 +🎫 Можно купить через Paypal или Payoneer $250 до 25 июля (включительно): `timur.shemsedinov@gmail.com` ## Краткое содержание @@ -52,8 +51,8 @@ 🔹 Упор на надежность, поддерживаемость, тестируемость, снижение зацепления 🔹 Примеры и задачи по исправлению скрытых проблемных состояний и data races -🎫 До 12 июля (включительно) можно купить за $200 на Patreon: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 -🎫 Можно купить через Paypal или Payoneer $200 до 12 июля (включительно): `timur.shemsedinov@gmail.com` +🎫 До 25 июля (включительно) можно купить за $250 на Patreon: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 +🎫 Можно купить через Paypal или Payoneer $250 до 25 июля (включительно): `timur.shemsedinov@gmail.com` ## Содержание @@ -214,9 +213,8 @@ ## Как попасть на курс -🎫 До 12 июля (включительно) можно купить за $200 на Patreon: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 -🎫 Можно купить через Paypal или Payoneer $200 до 12 июля (включительно): `timur.shemsedinov@gmail.com` -🎫 C 12 июля 2025 стоимость будет $250 +🎫 До 25 июля (включительно) можно купить за $250 на Patreon: https://www.patreon.com/tshemsedinov/shop/async-2025-675252 +🎫 Можно купить через Paypal или Payoneer $250 до 25 июля (включительно): `timur.shemsedinov@gmail.com` 👉 Новости курса будут в канале: https://t.me/asyncify 👉 Открытая группа курса: https://t.me/asynctalks From 2841c67fe024af38ca417335f4fe4973c68dbe88 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Fri, 18 Jul 2025 16:46:24 -0400 Subject: [PATCH 197/217] Add video links --- Courses/Talks.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index 7f11254..1a4851c 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -12,6 +12,9 @@ - [🧩 Паттерны Actor, Reactor, Proactor для JavaScript и TypeScript: Шемсединов Тимур, Дмитрий Нечай](https://youtube.com/live/tpY01TLctAs) - [🧩 Доступ к данным в JavaScript TypeScript: Repository, Active Record, DTO, ORM, Query Builder, SAGA](https://www.youtube.com/watch?v=diH1VfV_38o) - [🧩 Оптимизация структур данных и паттернов — V8, JavaScript, TypeScript](https://youtube.com/live/PncSzdGTzk0) +- [🧩 Паттерны асинхронного и параллельного программирования для JavaScript и TypeScript — Patterns 2025](https://youtube.com/live/dUTXJX37AEE) +- [🧩 IndexedDB — сравнение: три варианта доступа — нативное API, модель + репозиторий + сервис, DSL](https://youtu.be/gYdTQshjOGQ) +- [💡 JavaScript: вдохновленные Rust концепции владения (ownership) и трейтов (trait) в ECMAScript](https://youtu.be/lnUfBHQAxw4) ## 2024 From 764645f2757e764fd3f5c9e77de5a44d208d64af Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 24 Aug 2025 13:02:31 -0400 Subject: [PATCH 198/217] Add blockchain and CRDT talks --- Courses/Talks.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index 1a4851c..ca9ed13 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -2,6 +2,8 @@ ## 2025 +- [📥 Local-first для фронтенда: CRDT, PWA, OPFS, Blockchain прямо в браузере — Тимур Шемсединов, Илья Климов](https://youtube.com/live/cSWOOVh7xkU) +- [🌍 Blockchain и распределенная база данных Globalstorage, CRDT, синхронизация и разрешение конфликтов](https://youtu.be/7Scep7CXKoI) - [🚀 JavaScript: потоки и процессы, асинхронное и параллельное программирование на Node.js и в браузере](https://youtu.be/lxHudbhgfy0) - [🎙️ Найм зламаний — Макс Безуглий та Тимур Шемсединов — архітектура, алгоритми, патерни, софтскіли...](https://youtu.be/z2A40MbiQb4) - [🎙️ Карьера в IT и найм на работу: вакансии, резюме, собеседования, офферы, опыт, интервью, скилы](https://youtu.be/qkj9uJeEPhg) From ba64317dbb5a46f0d8bcbf10d5eb69789dd18c50 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sun, 31 Aug 2025 15:14:02 -0400 Subject: [PATCH 199/217] Fundamentals 2025 --- Courses/Fundamentals-2025.md | 156 +++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 Courses/Fundamentals-2025.md diff --git a/Courses/Fundamentals-2025.md b/Courses/Fundamentals-2025.md new file mode 100644 index 0000000..4ef9a92 --- /dev/null +++ b/Courses/Fundamentals-2025.md @@ -0,0 +1,156 @@ +# Основи програмування + +- Автор: Тимур Шемсединов https://github.com/tshemsedinov +- [Практичні завдання](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Fundamentals-2024.md#практичні-завдання) +- Словник термінів: готується для публікації +- Умовні позначення: + - ⭐ - Нові спрощені лекції + - ✨ - Старі але важливі лекції + - 🧑‍💻 - Приклади коду + - 🧩 - Необов'язкові лекції + +- Введення та огляд метеріалу + - ⭐ Новий вступ курсу 2025 (готується) + - ⭐ [Вступ курсу 2023](https://youtu.be/1lU7G46S4FA) + - ⭐ [Базовий JavaScript українською (8 годин)](https://youtu.be/FlXsGI7rzWE) + - ⭐ [Скорочений переклад базового JavaScrtipt руською (4 години)](https://youtu.be/HetL0ETbN6Y) + - ⭐ [Q&A для усіх курсів](https://youtu.be/Wm7wclbv1Ik) + - 🧩 [Введення у програмування](https://youtu.be/5Gt61EX6HZ4) + - 🧩 [Введення у програмування, продовження](https://youtu.be/PzlLXQ3RaDs) + - 🧩 [Мови програмування](https://youtu.be/enHA1CRkJe0) + - 🧩 Семінар: [JavaScript, відповіді на запитання](https://youtu.be/wqkQ6eslyzY) + - 🧩 [Історія розвитку мов програмування](https://youtu.be/qqz0VSaNxuw) + - 🧩 [Парадигми програмування](https://youtu.be/Yk1sxLVHfjs) + - ✨ [Базовий синтаксис JavaScript](https://youtu.be/xJn3k1f4BiM) + - ✨ [Базовий синтаксис JavaScript, продовження](https://youtu.be/qa-XleqA0JU) + - 🧩 Семінар: [Базовий синтаксис мови JavaScript](https://youtu.be/PGqjTXQe_qw) + - 🧑‍💻 Абстракції та їх перевикористання: https://github.com/HowProgrammingWorks/Reusable + - 🧑‍💻 Основні конструкції: https://github.com/HowProgrammingWorks/Cheatsheet +- Ідентифікатори та значення + - ⭐ [Ідентифікатори, змінні та константи](https://youtu.be/Ljj8HyUIPUA) + - ⭐ [Літарали, значення та типи даних](https://youtu.be/yf58Lmr_J90) + - 🧑‍💻 Типи даних: https://github.com/HowProgrammingWorks/DataTypes +- Функції + - ⭐ [Функції, блоки та область видимості змінних](https://youtu.be/h5IvZh5QHEM) + - ✨ [Функції, стрілочні функції, контексти, замикання JavaScript](https://youtu.be/pn5myCmpV2U) + - 🧑‍💻 Функції: https://github.com/HowProgrammingWorks/Function +- Умови + - ⭐ [Умови та розгалудження, оператор if](https://youtu.be/dhurClkDGrc) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Conditional +- Ітерування + - ⭐ [Цикли for, for..of, for..in](https://youtu.be/Ph-luU2sbdg) + - ⭐ [Цикли while, do..while](https://youtu.be/3ZC4O5dM5pY) + - ✨ [Ітерування, цикли та ітератори](https://youtu.be/lq3b5_UGJas) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Iteration +- Колекції + - ⭐ [Колекції — Array, Object](https://youtu.be/SqGoKGOZu40) + - 🧑‍💻 Масиви: https://github.com/HowProgrammingWorks/Arrays + - ✨ [Масиви, об'єкти, класи, прототипи JavaScript](https://youtu.be/VBMGnAPfmsY) + - ✨ [Масиви у JavaScript, методи Array](https://youtu.be/D1kfYBkX9FE) + - 🧑‍💻 Структури даних: https://github.com/HowProgrammingWorks/DataStructures + - ⭐ [Домішки (mixin), JSON серіалізація (serialization)](https://youtu.be/rMUB78bs26w) + - ⭐ [Множини (Set) та хеш-таблиці (Map)](https://youtu.be/1avvpS_Hqms) + - ✨ [Коллекції, множини, хеш таблиці у JavaScript](https://youtu.be/hN0wsq5LNOc) + - 🧑‍💻 Колекції: https://github.com/HowProgrammingWorks/Collections + - 🧑‍💻 Хеш таблиці: https://github.com/HowProgrammingWorks/Map + - 🧑‍💻 Множини (Set): https://github.com/HowProgrammingWorks/Set +- Практичні завдання + - ⭐ [Нові практичні завдання 1-5](https://youtu.be/4I2iL3JjFdM) + - ✨ [Налаштування середовища: Node.js, npm, git, eslint](https://youtu.be/hSyA7tcNaCE) Дивитись вибірково, що не зрозуміло – пропускайте + - ✨ Старий семінар: [Автоматична перевірка лабораторних робіт](https://youtu.be/M4KpG0LEAyA) + - ✨ Семінар: [Виконання лабораторних робіт з курсу](https://youtu.be/ikUOyFPzdJw) + - 🧑‍💻 Підготовка середовища виконання завдань: [Exercises.ru.md](https://github.com/HowProgrammingWorks/Introduction/blob/master/Exercises.ru.md) + - 🧑‍💻 [Практичні завдання](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Fundamentals-2024.md#практичні-завдання) +- Callbacks, timers + - ⭐ [Функції зворотнього виклику (callbacks) та таймери](https://youtu.be/MFG3NaEwu70) + - 🧑‍💻 Функції зворотнього виклику: https://github.com/HowProgrammingWorks/Callbacks + - ✨ [Функції вищого порядку, колбеки, події](https://youtu.be/1vqATwbGHnc) + - 🧑‍💻 Функції вищого порядку: https://github.com/HowProgrammingWorks/HigherOrderFunction + - ✨ [Таймери, таймаути та EventEmitter](https://youtu.be/LK2jveAnRNg) + - 🧑‍💻 Таймери: https://github.com/HowProgrammingWorks/Timers + - 🧑‍💻 EventEmitter: https://github.com/HowProgrammingWorks/EventEmitter + - 🧑‍💻 Події: https://github.com/metarhia/common/blob/master/lib/events.js +- Замикання (closures) + - ⭐ [Замикання closures, (функції + контексти)](https://youtu.be/_FranqU7420) + - ✨ [Функції, стрілочні функції, контексти, замикання JavaScript](https://youtu.be/pn5myCmpV2U) + - 🧑‍💻 Замикання (closures): https://github.com/HowProgrammingWorks/Closure + - 🧩 [Часткове застосування та curry](https://youtu.be/ND8KQ5xjk7o) + - 🧑‍💻 Часткове застосування: https://github.com/HowProgrammingWorks/PartialApplication +- Асинхронність + - ⭐ [Асинхронні функції, async, await](https://youtu.be/_3rRFN3iwsg) +- Обробка помилок + - ⭐ [Помилки (Error), та обробка exception](https://youtu.be/UmpMa-f7dM4) +- Модульність + - ⭐ [Системи модульності ESM (ECMAScript) та CJS (CommonJS)](https://youtu.be/MQepk3r41Rc) + - ⭐ [Декомпозиція програми на модулі](https://youtu.be/4SLMmET8ARM) +- Рекурсія + - ⭐ [Рекурсія, вихід з рекурсії та stack trace](https://youtu.be/bRgUmZgmXAg) + - ✨ [Рекурсія: непряма та хвостова, стек, вихід](https://youtu.be/W2skCjIgVKE) + - 🧑‍💻 Рекурсія: https://github.com/HowProgrammingWorks/Recursion +- ✨ [Робота з рядками, шаблонами та юнікодом](https://youtu.be/GcopcHQkA8M) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/String +- ✨ [Антипатерни загальні для всіх парадигм](https://youtu.be/NMUsUiFokr4) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Antipatterns/tree/master/JavaScript/01-Common +- ✨ [Консоль та командний рядок у JavaScript та Node.js](https://youtu.be/5aSZyKi5BmE) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/CommandLine +- 🧩 [Чеінінг функцій та об'єктів, обробка помилок](https://youtu.be/PfuEfIiLX34) + - 🧑‍💻 Чеінінг: https://github.com/HowProgrammingWorks/Chaining + - 🧑‍💻 Обробка помилок: https://github.com/HowProgrammingWorks/Errors +- ✨ [Антипатерни процедурного програмування](https://youtu.be/cTv7V22mkwE) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Antipatterns/tree/master/JavaScript/02-Procedural +- ✨ [Code Review: як це і навіщо](https://youtu.be/EKL6NiIQ6ZU) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/CodeReview + - Семінар: [Code Review, відповіді та питання](https://youtu.be/AgH4OAKbmkM) +- ✨ [Структури даних: списки, стек, черга, дек](https://youtu.be/9KvA4hDDSjk) + - 🧑‍💻 Списки: https://github.com/HowProgrammingWorks/LinkedList + - 🧑‍💻 Черги: https://github.com/HowProgrammingWorks/Dequeue +- ✨ [Сериализация и десериализация в JavaScript и Node.js](https://youtu.be/GtKPniOEzh8) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Serialization +- ✨ [Рефакторінг: причини, цілі, техніки та процес](https://youtu.be/z73wmpdweQ4) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Refactoring + - 🧑‍💻 Приклад проекту: https://github.com/tshemsedinov/node-mysql-utilities +- 🧩 Семінар: [Вибір напряму у програмуванні](https://youtu.be/1gL627DQF4A) +- 🧩 [Proxy та Symbol](https://youtu.be/UjZjSDyi9AM) + - 🧑‍💻 Проксі: https://github.com/HowProgrammingWorks/Proxy + - 🧑‍💻 Символи: https://github.com/HowProgrammingWorks/Symbol +- ✨ [Регулярні вирази та парсинг у JavaScript](https://youtu.be/-ef2E0ozxao) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/RegExp +- ✨ [Композиція: pipe, compose](https://youtu.be/xS9FicVrOTI) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Composition +- ✨ [Домішки: mixin, extend, Object.assign, class-mixin](https://youtu.be/NZMrJ2adEyY) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Mixin + - 🧩 Стара версія лекцій: https://youtu.be/2h9syXN5wO0 +- 🧩 [Прототипне програмування та прототипне успадкування](https://youtu.be/SzaXTW2qcJE) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/PrototypeChain + - ✨ Прототипи: https://github.com/HowProgrammingWorks/Prototype +- 🧩 [Мемоізація: memoize](https://youtu.be/H6S8QJo2Qxg) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Memoization + - 🧑‍💻 Стара версія лекцій: https://youtu.be/2h9syXN5wO0 +- 🧩 [Фабрики та пули об'єктів у JavaScript, factorify, poolify](https://youtu.be/Ax_mSvadFp8) + - 🧑‍💻 Фабрики: https://github.com/HowProgrammingWorks/Factory + - 🧑‍💻 Пули об'єктів: https://github.com/HowProgrammingWorks/Pool +- 🧩 [Функції-обгортки: wrappers](https://youtu.be/En7pWi2fSzs) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/Wrapper + - 🧩 Стара версія лекцій: https://youtu.be/2h9syXN5wO0 +- 🧩 [Типізовані масиви JavaScript](https://youtu.be/tTNcqxbxhfY) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/TypedArrays +- 🧩 [Нове у JavaScript](https://youtu.be/fUjHLj8bq_Y) + - 🧑‍💻 Приклади коду: https://github.com/HowProgrammingWorks/ESNext + +## Практичні завдання + +Запис семінарів про виконання та перевірку лабораторних робіт: +- [Семінар: автоматична перевірка лабораторних робіт](https://youtu.be/M4KpG0LEAyA) +- [Семінар: виконання лабораторних робіт з курсу "Основи програмування"](https://youtu.be/ikUOyFPzdJw) + +Репозитории с задачами: + +0. [Налаштування середовища](https://github.com/HowProgrammingWorks/Introduction) +1. [Змінні та типи даних](https://github.com/HowProgrammingWorks/DataTypes) +2. [Базовий синтаксис JavaScript](https://github.com/HowProgrammingWorks/Reusable) +3. [Функції та методи](https://github.com/HowProgrammingWorks/Function) +4. [Цикли та ітерування](https://github.com/HowProgrammingWorks/Iteration) +5. [Closures та чеїнінг](https://github.com/HowProgrammingWorks/Closure) +6. [Композиція функцій](https://github.com/HowProgrammingWorks/Composition) +7. [Робота з масивами](https://github.com/HowProgrammingWorks/Arrays) +8. [Функції вищого порядку](https://github.com/HowProgrammingWorks/HigherOrderFunction) From abb48fe93467fad9dd025eb35ff074c7a16cf7c2 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 22 Sep 2025 20:42:40 -0400 Subject: [PATCH 200/217] Update Talks.md --- Courses/Talks.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index ca9ed13..1caae65 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -2,6 +2,7 @@ ## 2025 +- [🎙️ Фронтенд без каші: патерни та архітектура | Лайвкодінг — Тимур Шемсединов, Сергій Немчинський](https://www.youtube.com/watch?v=UQFpyb2W-vY) - [📥 Local-first для фронтенда: CRDT, PWA, OPFS, Blockchain прямо в браузере — Тимур Шемсединов, Илья Климов](https://youtube.com/live/cSWOOVh7xkU) - [🌍 Blockchain и распределенная база данных Globalstorage, CRDT, синхронизация и разрешение конфликтов](https://youtu.be/7Scep7CXKoI) - [🚀 JavaScript: потоки и процессы, асинхронное и параллельное программирование на Node.js и в браузере](https://youtu.be/lxHudbhgfy0) From 751fdb1b84de4499dfc595fa84a1643bc8ef5a4a Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Sat, 4 Oct 2025 16:10:39 -0400 Subject: [PATCH 201/217] Add paradigms talks --- Courses/Talks.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index 1caae65..ada2407 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -2,6 +2,7 @@ ## 2025 +- [🎙️ Холивары между парадигмами не имеют смысла — Виталий Брагилевский, Тимур Шемсединов, Деми Мурыч](https://www.youtube.com/watch?v=ES2NPqlDnek) - [🎙️ Фронтенд без каші: патерни та архітектура | Лайвкодінг — Тимур Шемсединов, Сергій Немчинський](https://www.youtube.com/watch?v=UQFpyb2W-vY) - [📥 Local-first для фронтенда: CRDT, PWA, OPFS, Blockchain прямо в браузере — Тимур Шемсединов, Илья Климов](https://youtube.com/live/cSWOOVh7xkU) - [🌍 Blockchain и распределенная база данных Globalstorage, CRDT, синхронизация и разрешение конфликтов](https://youtu.be/7Scep7CXKoI) From 7f530d54a9d41c80ebcc975da566ad5897355b46 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 5 Nov 2025 20:55:47 +0200 Subject: [PATCH 202/217] Add new talk on development patterns --- Courses/Talks.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index ada2407..85f9278 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -19,6 +19,7 @@ - [🧩 Паттерны асинхронного и параллельного программирования для JavaScript и TypeScript — Patterns 2025](https://youtube.com/live/dUTXJX37AEE) - [🧩 IndexedDB — сравнение: три варианта доступа — нативное API, модель + репозиторий + сервис, DSL](https://youtu.be/gYdTQshjOGQ) - [💡 JavaScript: вдохновленные Rust концепции владения (ownership) и трейтов (trait) в ECMAScript](https://youtu.be/lnUfBHQAxw4) +- [💡 Нужны ли нам знания о шаблонах разработки? Стрим с Деми Мурычем](https://www.youtube.com/live/PlXh9l04Uz8) ## 2024 From 31d7fd459607af87a4c080421c75d0d993d133f1 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 15 Dec 2025 01:23:28 +0200 Subject: [PATCH 203/217] Update Architecture 2025 --- Courses/Architecture-2025.md | 61 ++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 30 deletions(-) diff --git a/Courses/Architecture-2025.md b/Courses/Architecture-2025.md index d66c819..d0edd9c 100644 --- a/Courses/Architecture-2025.md +++ b/Courses/Architecture-2025.md @@ -20,6 +20,37 @@ 18. Imperative shell, Functional core 19. Multi-paradigm programming in Architecture 20. Metaprogramming +21. Orchestration and Choreography, SAGA Pattern +22. Referential Transparency + +## Code examples: + +- Actor model: https://github.com/HowProgrammingWorks/Actor +- Pattern Actor: https://github.com/HowProgrammingWorks/Actor +- Domain-driven design: https://github.com/HowProgrammingWorks/DDD +- Blockchain: https://github.com/HowProgrammingWorks/Blockchain +- Conflict-free Replicated Data Types: https://github.com/HowProgrammingWorks/CRDT +- Peer-to-Peer with WebRTC: https://github.com/HowProgrammingWorks/WebRTC +- Programming Paradigms Comparison: https://github.com/HowProgrammingWorks/Paradigms +- Metaprogramming: https://github.com/HowProgrammingWorks/Metaprogramming +- Modularity: https://github.com/HowProgrammingWorks/Modularity +- Dependency Injection: https://github.com/HowProgrammingWorks/DependencyInjection +- Unittesting: https://github.com/HowProgrammingWorks/Unittesting +- Abstractions: https://github.com/HowProgrammingWorks/Abstractions +- Project: https://github.com/HowProgrammingWorks/Project +- Abstraction Layers: https://github.com/HowProgrammingWorks/AbstractionLayers +- Sandboxes: https://github.com/HowProgrammingWorks/Sandboxes +- Inversion Of Control: https://github.com/HowProgrammingWorks/InversionOfControl +- Dependency Injection: https://github.com/HowProgrammingWorks/DependencyInjection +- Inter Process Communication: https://github.com/HowProgrammingWorks/InterProcessCommunication +- Data access layer: https://github.com/HowProgrammingWorks/Transaction +- API: https://github.com/HowProgrammingWorks/API +- CQS: https://github.com/HowProgrammingWorks/CQS +- CQRS: https://github.com/HowProgrammingWorks/CQRS +- EventSourcing: https://github.com/HowProgrammingWorks/EventSourcing +- Pattern Command: https://github.com/HowProgrammingWorks/Command +- SAGA Pattern: https://github.com/HowProgrammingWorks/Saga +- Referential Transparency: https://github.com/HowProgrammingWorks/ReferentialTransparency ## Students seminar topics @@ -91,33 +122,3 @@ Topic: please propose before call in 3-7 days     - its parameters     - any objects it creates/instantiates     - its direct component objects - -## Old lectures - -- [Архитектурный подход к программированию](https://youtu.be/d_vyO2CkiOc) -- [Слои, связанность и связность кода](https://youtu.be/A3RpwNlVeyY) - - Примеры кода: https://github.com/HowProgrammingWorks/Abstractions -- [Модули, слои, структура проекта, песочницы в JavaScript и Node.js](https://youtu.be/O7A9chb573E) - - Пример проекта: https://github.com/HowProgrammingWorks/Project - - Абстрактные слои: https://github.com/HowProgrammingWorks/AbstractionLayers - - Песочницы: https://github.com/HowProgrammingWorks/Sandboxes -- [Инверсия управления и внедрение зависимостей в Node.js](https://youtu.be/Fz86Fdjz-LM) - - Инверсия управления: https://github.com/HowProgrammingWorks/InversionOfControl - - Внедрение зависимостей: https://github.com/HowProgrammingWorks/DependencyInjection -- [Межпроцессовое взаимодействие в Node.js](https://youtu.be/2OXWZFMvfbc) - - Примеры кода: https://github.com/HowProgrammingWorks/InterProcessCommunication -- [Высоконагруженные распределенные приложения на Node.js](https://youtu.be/7tfZDABPvVs) -- [Слой доступа к данным, курсор, транзакция](https://youtu.be/CRcSWtWVvrA) - - Примеры кода: https://github.com/HowProgrammingWorks/Transaction -- [Разработка API на Node.js (клиент и сервер)](https://youtu.be/-az912XBCu8) - - Примеры кода: https://github.com/HowProgrammingWorks/API -- [CQS, CQRS, Event Sourcing - Разделение запросов и модификации данных](https://youtu.be/T2tRc80Q8Qw) - - CQS: https://github.com/HowProgrammingWorks/CQS - - CQRS: https://github.com/HowProgrammingWorks/CQRS - - EventSourcing: https://github.com/HowProgrammingWorks/EventSourcing -- [Применение EventSourcing](https://youtu.be/kFNtKiK2SPs) - - https://github.com/HowProgrammingWorks/EventSourcing - - https://github.com/HowProgrammingWorks/CQRS - - https://github.com/HowProgrammingWorks/Command -- [Serverless Clouds (FaaS) и изоляция контекстов запросов в Node.js](https://youtu.be/x-Rd6fPV6L8) - - Слайды: https://www.slideshare.net/tshemsedinov/serverless-clouds-faas-and-request-context-isolation-in-nodejs From 24498ea7b3c9f991f4279a14fb5d200c77cb215f Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 29 Dec 2025 22:27:36 +0200 Subject: [PATCH 204/217] Add Software Engineering courses for 2026 --- Courses/Software-Engineering-2026.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Courses/Software-Engineering-2026.md diff --git a/Courses/Software-Engineering-2026.md b/Courses/Software-Engineering-2026.md new file mode 100644 index 0000000..bf57d99 --- /dev/null +++ b/Courses/Software-Engineering-2026.md @@ -0,0 +1,16 @@ +# Software Engineering Courses 2026 + +| Course name | Early | Next | Final | Description | Materials | +| --- | ---: | ---: | ---: | --- | --- | +| JavaScript | | | Free | Modern JavaScript for Beginners. | [ua](https://youtu.be/FlXsGI7rzWE), [ru](https://youtu.be/HetL0ETbN6Y) | +| Fundamentals | | | Free | A good old Fundamental university course in Software Engineering | [ru](https://github.com/HowProgrammingWorks/Index) | +| OOP for JS | | | Free | Object-Oriented Programming for JavaScript and TypeScript with best Practices | ua, ru | +| Paradigms | $200 | $250 | $300 | How to achieve required code characteristics with paradigms and code styles | ru | +| Async 2026 | $200 | $250 | $300 | A comprehensive practical course on asynchronous programming for JS/TS | ru, ua | +| Node.js 2026 | $200 | $250 | $300 | Backend application development and deep dive into Node.js internals | ru | +| Scale 2026 | $500 | $600 | $700 | Scaling complex Distributed, Interactive, Colaborative & Highload applications | ru | +| Patterns 2026 | see | tariffs | | Rethinking GRASP, SOLID, GoF patterns for Frontend & Backend modern development | [ru](https://nodeua.com/Patterns-2025), [ua](https://nodeua.com/Patterns-2025-ua) | +| Code with AI | $200 | $250 | $300 | I will share my practical programming experience with AI tools for JS/TS | ua, ru | +| Performance | $200 | $250 | $300 | Intersection of development & code execution productivity for JavaScript in V8 | ru | +| Career Track | $1000 | $1250 | $1500 | Career and job search advisory for software engineering professionals | ua, ru | +| Community | $10/m | | $10/m | Weekly Q&A and livecoding streams, TG community, special lectures | [ua, ru](https://www.patreon.com/cw/tshemsedinov/membership) | From a14562d2217b981e9a9d87ff5da869172cd616fd Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 29 Dec 2025 22:38:27 +0200 Subject: [PATCH 205/217] Update Software-Engineering-2026.md --- Courses/Software-Engineering-2026.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Courses/Software-Engineering-2026.md b/Courses/Software-Engineering-2026.md index bf57d99..d3a701f 100644 --- a/Courses/Software-Engineering-2026.md +++ b/Courses/Software-Engineering-2026.md @@ -1,16 +1,16 @@ # Software Engineering Courses 2026 -| Course name | Early | Next | Final | Description | Materials | +| Course name | Early | Next | Final | Description | | | --- | ---: | ---: | ---: | --- | --- | | JavaScript | | | Free | Modern JavaScript for Beginners. | [ua](https://youtu.be/FlXsGI7rzWE), [ru](https://youtu.be/HetL0ETbN6Y) | | Fundamentals | | | Free | A good old Fundamental university course in Software Engineering | [ru](https://github.com/HowProgrammingWorks/Index) | -| OOP for JS | | | Free | Object-Oriented Programming for JavaScript and TypeScript with best Practices | ua, ru | -| Paradigms | $200 | $250 | $300 | How to achieve required code characteristics with paradigms and code styles | ru | -| Async 2026 | $200 | $250 | $300 | A comprehensive practical course on asynchronous programming for JS/TS | ru, ua | +| OOP for JS | | | Free | Object-Oriented Programming best Practices for JavaScript & TypeScript | ua, ru | +| Paradigms | $200 | $250 | $300 | Achieve required code characteristics with paradigms & code styles | ru | +| Async 2026 | $200 | $250 | $300 | A comprehensive practical course on JS asynchronous programming | ru, ua | | Node.js 2026 | $200 | $250 | $300 | Backend application development and deep dive into Node.js internals | ru | -| Scale 2026 | $500 | $600 | $700 | Scaling complex Distributed, Interactive, Colaborative & Highload applications | ru | -| Patterns 2026 | see | tariffs | | Rethinking GRASP, SOLID, GoF patterns for Frontend & Backend modern development | [ru](https://nodeua.com/Patterns-2025), [ua](https://nodeua.com/Patterns-2025-ua) | -| Code with AI | $200 | $250 | $300 | I will share my practical programming experience with AI tools for JS/TS | ua, ru | -| Performance | $200 | $250 | $300 | Intersection of development & code execution productivity for JavaScript in V8 | ru | -| Career Track | $1000 | $1250 | $1500 | Career and job search advisory for software engineering professionals | ua, ru | +| Scale 2026 | $500 | $600 | $700 | Scaling Distributed, Interactive, Colaborative & Highload applications | ru | +| Patterns 2026 | see | tariffs | | Rethinking GRASP, SOLID, GoF patterns for Frontend & Backend | [ru](https://nodeua.com/Patterns-2025), [ua](https://nodeua.com/Patterns-2025-ua) | +| Code with AI | $200 | $250 | $300 | Share my practical programming experience with AI tools for JS/TS | ua, ru | +| Performance | $200 | $250 | $300 | Combine development & code execution productivity for JavaScript VMs | ru | +| Career Track | $1000 | $1250 | $1500 | Career & job search advisory for software engineering professionals | ua, ru | | Community | $10/m | | $10/m | Weekly Q&A and livecoding streams, TG community, special lectures | [ua, ru](https://www.patreon.com/cw/tshemsedinov/membership) | From 8402d09761d24ded1b73714499f349e91af294a5 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 29 Dec 2025 22:44:40 +0200 Subject: [PATCH 206/217] Update Software-Engineering-2026.md --- Courses/Software-Engineering-2026.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Courses/Software-Engineering-2026.md b/Courses/Software-Engineering-2026.md index d3a701f..bd8a345 100644 --- a/Courses/Software-Engineering-2026.md +++ b/Courses/Software-Engineering-2026.md @@ -4,12 +4,12 @@ | --- | ---: | ---: | ---: | --- | --- | | JavaScript | | | Free | Modern JavaScript for Beginners. | [ua](https://youtu.be/FlXsGI7rzWE), [ru](https://youtu.be/HetL0ETbN6Y) | | Fundamentals | | | Free | A good old Fundamental university course in Software Engineering | [ru](https://github.com/HowProgrammingWorks/Index) | -| OOP for JS | | | Free | Object-Oriented Programming best Practices for JavaScript & TypeScript | ua, ru | +| OOP for JS | | | Free | Object-Oriented Programming best practices for JavaScript & TypeScript | ua, ru | | Paradigms | $200 | $250 | $300 | Achieve required code characteristics with paradigms & code styles | ru | | Async 2026 | $200 | $250 | $300 | A comprehensive practical course on JS asynchronous programming | ru, ua | | Node.js 2026 | $200 | $250 | $300 | Backend application development and deep dive into Node.js internals | ru | -| Scale 2026 | $500 | $600 | $700 | Scaling Distributed, Interactive, Colaborative & Highload applications | ru | -| Patterns 2026 | see | tariffs | | Rethinking GRASP, SOLID, GoF patterns for Frontend & Backend | [ru](https://nodeua.com/Patterns-2025), [ua](https://nodeua.com/Patterns-2025-ua) | +| Scale 2026 | $500 | $600 | $700 | Scaling Distributed, Interactive, Collaborative & Highload applications | ru | +| Patterns 2026 | | tariffs | | Rethinking GRASP, SOLID, GoF patterns for Frontend & Backend | [ru](https://nodeua.com/Patterns-2025), [ua](https://nodeua.com/Patterns-2025-ua) | | Code with AI | $200 | $250 | $300 | Share my practical programming experience with AI tools for JS/TS | ua, ru | | Performance | $200 | $250 | $300 | Combine development & code execution productivity for JavaScript VMs | ru | | Career Track | $1000 | $1250 | $1500 | Career & job search advisory for software engineering professionals | ua, ru | From 7ec47480e7058c285c1ded4520c12093c054fa7c Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 29 Dec 2025 22:50:23 +0200 Subject: [PATCH 207/217] Create Scale-2026.md --- Courses/Scale-2026.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Courses/Scale-2026.md diff --git a/Courses/Scale-2026.md b/Courses/Scale-2026.md new file mode 100644 index 0000000..f80ed8b --- /dev/null +++ b/Courses/Scale-2026.md @@ -0,0 +1,13 @@ +# Scale 2026 + +> Scaling complex Distributed, Interactive, Collaborative and Highload applications for JavaScript, TypeScript and Node.js + +A practical and intensive course focused on architecting and scaling modern distributed systems. + +We explore techniques for building +- Reliable highload and High performance Platforms +- Real-time collaboration apps, low-latency services +- Distributed systems + +Participants will learn scalable architecture patterns, data-consistency models, performance optimisation, autoscaling strategies, and chaos-resilience approaches. +Ideal for engineers designing systems that must handle millions of users, global traffic, and continuous growth. From d6171cee1f9b8876db59de9883560ad498c457a0 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 29 Dec 2025 22:54:23 +0200 Subject: [PATCH 208/217] Create Performance.md --- Courses/Performance.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 Courses/Performance.md diff --git a/Courses/Performance.md b/Courses/Performance.md new file mode 100644 index 0000000..59bcdbf --- /dev/null +++ b/Courses/Performance.md @@ -0,0 +1,7 @@ +# Performance 2026 + +> How to combine Development and Code Execution productivity for JavaScript Virtial Machines + +A course focused on writing faster, cleaner, and more maintainable JavaScript for modern VM engines. +Participants learn how to boost execution efficiency and developer productivity through optimized patterns, V8-friendly coding, memory-safe architecture, and streamlined tooling workflows. +Includes real-world performance tuning, code refactoring, and VM-aware optimization techniques. From e7a6291287723071349351496f7556fbb8410070 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 29 Dec 2025 22:57:33 +0200 Subject: [PATCH 209/217] Create Career-Track.md --- Courses/Career-Track.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 Courses/Career-Track.md diff --git a/Courses/Career-Track.md b/Courses/Career-Track.md new file mode 100644 index 0000000..cb021af --- /dev/null +++ b/Courses/Career-Track.md @@ -0,0 +1,7 @@ +# Career Track + +> Career and Job Search Advisory for Software Engineering Professionals + +A focused program designed to help developers navigate career decisions, refine their professional brand, and confidently approach the job market. +Participants learn how to build a strong professional shape, improve interview performance, structure job search strategies, and position themselves for senior or leadership roles. +Ideal for engineers seeking growth, transition, or new opportunities in the tech industry. From db176c91dfbaf92b82bb6330617e23c72d6dfd9c Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 29 Dec 2025 23:00:33 +0200 Subject: [PATCH 210/217] Create Paradigms-2026.md --- Courses/Paradigms-2026.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 Courses/Paradigms-2026.md diff --git a/Courses/Paradigms-2026.md b/Courses/Paradigms-2026.md new file mode 100644 index 0000000..b70849a --- /dev/null +++ b/Courses/Paradigms-2026.md @@ -0,0 +1,7 @@ +# Paradigms 2026 + +> How to achieve Required Code Characteristics with Paradigms & Code Styles + +A practical course exploring how programming paradigms influence code quality, performance, maintainability, and scalability. +Participants will learn when and why to apply procedural, functional, OOP, and metaprogramming techniques to achieve reliability, flexibility, and clarity in real-world systems. +Through hands-on examples, we refine code style to match product goals, improve architecture decisions, and form a strong foundation for building robust software. From 0d3d39e10cdf517d46874b9152b8ba1afb079951 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 1 Jan 2026 07:18:35 +0200 Subject: [PATCH 211/217] Add async 2026 --- Courses/Async-2026.md | 231 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 231 insertions(+) create mode 100644 Courses/Async-2026.md diff --git a/Courses/Async-2026.md b/Courses/Async-2026.md new file mode 100644 index 0000000..de46288 --- /dev/null +++ b/Courses/Async-2026.md @@ -0,0 +1,231 @@ +# Асинхронное программирование 2026 + +💻 Для JavaScript и TypeScript, бекенд и фронтенд +⏱️ 9 часов основных материалов и более 45 часов дополнительных +🌍 Два языка лекций: русский и украинский +🛠️ Практика на живых оупенсорс проектах и библиотеках, а не на синтетических задачах +👥 Семинары каждую неделю, постоянные ревью кода (курс это не только видео) +🔄 2 года обновления материалов: все, что выйдет в 2026 + обновления 2027 +♾️ Все материалы остаются навсегда +📜 Курсу уже 15 лет, ежегодно обновляется +💼 Примеры кода из реальных проектов, концентрация на практическом применении +🌐 Онлайн-формат +🏃‍♂️‍➡️ Скорость обучения выбираете себе сами +📦 Исходный код всех примеров и практических заданий +👨‍🏫 Обратная связь от преподавателя на семинарах и ревью +❓ Возможность задавать вопросы в сообществе курса +✅ Актуальные материалы, соответствующие современным стандартам по состоянию на 2026 +🎯 Подходит для разработчиков разных уровней: от джуна до архитектора, от прикладного до системного программирования + +> Этому курсу уже 15 лет, я обновляю его каждый год и за это время он стал самым крупным и полным сборником знаний про асинхронное программирование. Интернет полон устаревших материалов по JavaScript, даже то, как люди писали асинхронный код 5-7 лет назад уже имеет мало общего с современными практиками. В открытом виде есть все материалы, записанные до 2020 года: [открытый курс сообщества Metarhia по асинхронному программированию](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md). Старый курс стал слишком громоздким, но его материалы тоже включены сюда, как дополнительные и исторические, потому что поддержку легаси никто не отменял. + +🗓️ Материалы разделены на самое актуальное (что можно освоить за 1 месяц, если тратить по 2-3 часа в неделю) и огромную библиотеку всевозможных асинхронных абстракций и подходов, какие только есть в JavaScript для выборочного освоения + +🎫 До 7 января 2026 (включительно) можно купить за $200 на Patreon: https://www.patreon.com/posts/async-2026-early-146992165 +🎫 До 14 января 2026 (включительно) за $250 +🎫 Далее, в течение всего 2026 года: $300 +🎫 Можно купить через Paypal и Payoneer: `timur.shemsedinov@gmail.com` + +![PXL_20231227_190319918 MP](https://github.com/metatech-university/Async-2024/assets/4405297/2d0855a7-18d5-45c2-8fa9-d1e873ba1030) + +👉 [Обзор контрактов и абстракций](https://youtube.com/live/dUTXJX37AEE) +👉 [Огляд українською асинхронного програмування](https://youtu.be/isyJISjlpE4) +👉 [Обзор параллельного программирования](https://youtu.be/lxHudbhgfy0) + +Еще нужно упомянуть, что в системном и прикладном коде асинхронное программирование должно выглядеть принципиально по-разному. Полностью скрыть от продуктового разработчика сложность асинхронного кода за абстракциями не получится, потому что он в любом случае будет работать с таймерами, событиями, стримами, fetch и другими асинхронными API, но его можно писать в десятки раз проще, чем асинхронный код в системном слое. Что касается системного слоя, то нужно вводить в обиход теорию очередей (системы массового обслуживания), модель акторов, часть абстракций из параллельного программирования (семафоры, рандеву, атомарные операции). + +## Краткое содержание + +Для того, чтобы писать прикладной код хватит первого столбика таблицы (а в оглавлении темы помечены 💯). Второй столбик полезен как дополнительные знания (углубленное изучение помечено как 🧑‍🎓). Для бекенда на ноде нужно освоить два первых столбика. Третий столбик содержит системные вещи (помечены ⚙️ в оглавлении), которые нужны для разработки инструментов, платформ и библиотек. Четвертый столбик (помечен 🧑‍🚀) это дополнительные абстракции, которые можно осваивать выборочно, они понадобятся не всем, но если вы работаете в проектах, где много функционального и/или реактивного программирования. Пятый столбик - вещи, которые морально устарели и могут рассматриваться как интересный антиквариат (помечены 🕰️). + +| 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` | `Future` | `Metasync` | +| `streams` | `Async Generator` | `MessageChannel` | `coroutines` | `middleware` | +| `signals` | `GoF pattern Iterator` | `BroadcastChannel` | `Actor Model` | `RxJS` | +| `locks` | `Actor pattern` | `threads` | `do` | | +| `iterators` | `Disposable` | `processes` | | | + +🔹 Концентрация на практическом применении (примеры кода из реальных проектов) +🔹 Актуальность и соответствие стандартам по состоянию на 2025-2026 +🔹 Задачи и разбор их решений, семинары, ревью кода (курс это не только видео) +🔹 Рекомендации к выбору стиля и абстракций асинхронности под задачу +🔹 Внимание к корректной обработке ошибок во всех стилях асинхронности +🔹 Упор на надежность, поддерживаемость, тестируемость, снижение зацепления +🔹 Примеры и задачи по исправлению скрытых проблемных состояний и data races + +🎫 До 7 января 2026 (включительно) можно купить за $200 на Patreon: https://www.patreon.com/posts/async-2026-early-146992165 +🎫 До 14 января 2026 (включительно) за $250 +🎫 Далее, в течение всего 2026 года: $300 +🎫 Можно купить через Paypal и Payoneer: `timur.shemsedinov@gmail.com` + +## Содержание + +- 💯 Контракты асинхронности на базе callback + - ⭐ Контракты `Callback` и `Callback-last-error-first` + - 💻 Примеры кода + - 🧑‍💻 Задания по колбекам и созвон с разбором заданий + - 🕰️ Функции высшего порядка, колбеки, события на JavaScript + - 🕰️ Асинхронное программирование на callback`ах в JavaScript + - 💡 V8: оптимизируем возврат из функции в JavaScript через return, resolve, callback — Деми Мурыч +- 💯 Минимально необходимое понимание рантайма: event loop, I/O, таймеры + - ⭐ Фазы Event-loop в V8 и Node.js + - 🗃️ Стрим с разбором Event loop и асинхронности + - 💻 Примеры кода + - 🧑‍💻 Задания по таймерам + - ✨ Event loop, асинхронность, таймеры, колбеки, промисы, async/await + - 💡 Асинхронное программирование в JavaScript, Node.js: callback, promise, thenable, async/await +- 🧑‍🎓 Паттерны Actor, Reactor, Proactor + - ⭐ Actor + Actor Compose (композиция актора и состояния) + - ⭐ Паттерн Reactor (реактор): как устроен Event Loop в Node.js + - ⭐ Паттерн Proactor + - 💡 Семинар Паттерны Actor, Reactor, Proactor для JavaScript и TypeScript +- 💯 Контракты на базе событий + - ⭐ События: `EventTarget`, `EventEmitter` + - ⭐ GoF Pattern Observer + - 💻 Примеры кода по событиям + - 🧑‍💻 Задания по событиям + - ✨ EventEmitter из старой лекции + - 💻 Примеры кода из старой лекции по EventEmitter + - 💡 Code review: Observable, EventEmitter, EventTarget +- 💯 Абстракция потоков `Stream` + - ⭐ Стримы Readable, Writable, Transform, открытый конструктор, буферизация, backpressure + - ⭐ Web Streams — браузерное API для потоков событий + - 💻 Примеры кода + - ✨ Паттерн открытый конструктор (Revealing Constructor) + - 💻 Примеры кода + - ✨ Потоки (Streams) в Node.js + - ✨ HTTP сервер в Node.js, req, res, сокеты и потоки (streams) +- ⚙️ Контракт `Thenable` + - ⭐ Контракт `Thenable` + - ✨ Thenable из старой лекции + - ✨ Thenable и легковесный await + - 💻 Примеры кода + - 🧑‍💻 Задания по `Thenable` и созвон с разбором заданий +- 💯 Контракт `Promise` + - ⭐ Promise: then/catch/finally и методы класса all, allSettled, race, any + - ✨ Асинхронность на промисах из старой лекции + - 💻 Примеры кода + - 🧑‍💻 Задания по `Promise` и созвон с разбором заданий +- 💯 Контракт асинхронных функций `async/await` + - ⭐ Асинхронные функции + - ✨ Асинхронные функции из старой лекции + - 💻 Примеры кода + - 🧑‍💻 Задания по `async/await` +- 💯 Контракт сигналов `Signals` + - ⭐ Сигналы: signal, computed, effect + - 💻 Примеры кода + - 🧑‍💻 Задания по сигналам +- 💯 Обработка ошибок, их выявление и решение проблем со стектрейсом + - ⭐ Обработка ошибок, логирование и агрегирование + - ⭐ Семинар: Errors, exceptions, operational, soft, hard, recovery, logging + - 💡 Реализация `Graceful shutdown` в Node.js, `unhandled exceptions`, `async stack trace` + - ✨ Обработка ошибок из старой лекции + - 💻 Примеры кода + - 🧑‍💻 Задания по обработке ошибок +- 🧑‍🎓 Асинхронная очередь `AsyncQueue` + - 💡 Семинар: Асинхронная очередь — AsyncQueue, ConcurrentQueue + - 💡 Node.js Queue optimized for JavaScript V8: Circular Buffer, Unrolled List, Unrolled Queue + - ✨ Конкурентная асинхронная очередь из старой лекции + - 💻 Примеры кода +- 🧑‍🎓 Асинхронный пул `AsyncPool` + - ⭐ Паттерн Factory Method + - ⭐ Паттерны: Object Pool, Factory + - ⭐ Асинхронный Pool + - 💡 Семинар: Creator, Factory, Factory Method, Object Pool + - ✨ Асинхронный пул для worker thread pool в Node.js + - ✨ Фабрики и пулы объектов в JavaScript, factorify, poolify + - 💻 Примеры кода +- 🧑‍🎓 Асинхронная коллекция `Collector` + - ⭐ Асинхронные коллекции (собираем значения до готовности) + - ✨ Асинхронные коллекторы данных + - 💻 Примеры кода +- 🧑‍🎓 Паттерн "цепочка ответственности" + - ⭐ Pattern: Chain of responsibility + - 💻 Примеры кода +- 🧑‍🎓 Конвертеры контрактов `asyncify`, `callbackify`, стыковка кода в разных стилях + - ⭐ GoF Patterns: Adapter + - ⭐ Асинхронные адаптеры + - 💡 Семинар по адаптерам для Node.js и асинхронного программирования + - 💡 Node.js ревью кода promisify — Тимур Шемсединов и Деми Мурыч + - ✨ Асинхронные адаптеры из старой лекции + - 💻 Примеры кода +- 🧑‍🎓 Предотвращение состояния гонки по данным и управлению в асинхронном коде +- 🧑‍🎓 Отмена асинхронных операций + - ⭐ AbortController, AbortSignal + - 💻 Примеры кода +- 🧑‍🎓 `Async Generator` и `Async Iterator` + - ⭐ Generator, iterator, iterable + - ⭐ Async generator, Async iterator, Async iterable + - ✨ Генераторы и асинхронные генераторы из старой лекции + - ✨ Итераторы и асинхронные итераторы из старой лекции + - 💻 Примеры кода +- ⚙️ Абстракции портированные из параллельного программирования в асинхронное + - ✨ Семафоры и мьютексы в JavaScript и Node.js + - 💻 Асинхронные абстракции: `Semaphore`, `Mutex` + - 💻 Блокировки WebLocks API + - 💻 Блокировки `Lock`, `Spin Lock` +- ⚙️ Абстракции параллельного программирования: процессы и потоки + - ⭐ Многопоточность в Node.js + - ⭐ Web Locks API in Node.js and browser + - ⭐ Потоки и процессы в JavaScript, асинхронное и параллельное программирование на Node.js и в браузере + - ⭐ Потоки та процеси українською для Web та Node.js, Atomics/CAS, шарена пам'ять, блокування + - ✨ Межпроцессовое взаимодействие в Node.js + - ⭐ Межпроцессовое и межпотоковое взаимодействие, `MessageChannel`, `BroadcastChannel` + - ⭐ Корутины `coroutines` +- 🧑‍🚀 Асинхронная композиция `compose callbacks` & `async compose` + - ⭐ Асинхронная композиция: compose, pipe — функциональное программирование + - ✨ Асинхронная композиция функций + - 💻 Примеры кода +- 🧑‍🚀 Асинхронность на потоках событий `RxJS` + - ✨ Асинхронность на RxJS из старой лекции + - 💻 Примеры кода +- 🧑‍🚀 Модель акторов `actor model` + - ✨ Модель акторов + - 💻 Примеры кода +- 🧑‍🚀 Функциональное асинхронное программирование, контракт `Future` + - ⭐ FP Async Pattern — Future + - ✨ Асинхронность на фьючерах без состояния + - 💻 Примеры кода +- 🕰️ Асинхронность на синхронных генераторах `function*/yield` +- 🕰️ Мидлвары `middleware` как антипаттерн + - ✨ Node.js Middleware – никогда больше! + - 💻 Примеры кода +- 🕰️ Контракты семейства `Deferred` + - ✨ Deferred: Асинхронность на деферах с состоянием + - 💻 Примеры кода +- 🕰️ Async.js + - ✨ Легаси код на библиотеке `Async.js` + - 💻 Примеры кода +- 🕰️ Коллекция асинхронных абстракций `Metasync` +- ⚙️ Трекинг асинхронных контекстов + - ⭐ AsyncLocalStorage, AsyncResource + - 💻 Примеры использования AsyncLocalStorage и AsyncResource +- ⭐ Принципы и паттерны с адаптацией для JavaScript, TypeScript, Node.js и асинхронного программирования + - 💡 Принципы SOLID + - 💡 Паттерны GRASP + - ✨ Контрактное программирование + +## Обратите внимание + +Что нужно знать и уметь на входе: + +- 🔗 [Синтаксис JavaScript без всяких триков](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Fundamentals.md) +- 💡 Уверенно владеть git, иметь github аккаунт +- 💡 Любая среда разработки, IDE или редактор + +Чем это курс не является: это не чтение документации, не курс по библиотекам и фреймворкам, не повторение старого курса, не лайвкодинг и не мастеркласс, не стрим. Новый курс - это максимально сконцентрированная информация и практические задачи как для прикладного, так и для системного программирования со сравнением этих подходов. + +## Как попасть на курс + +🎫 До 7 января 2026 (включительно) можно купить за $200 на Patreon: https://www.patreon.com/posts/async-2026-early-146992165 +🎫 До 14 января 2026 (включительно) за $250 +🎫 Далее, в течение всего 2026 года: $300 +🎫 Можно купить через Paypal и Payoneer: `timur.shemsedinov@gmail.com` + +👉 Новости курса будут в канале: https://t.me/asyncify +👉 Открытая группа курса: https://t.me/asynctalks +👉 Подписывайтесь на https://t.me/metarhia и https://www.youtube.com/@TimurShemsedinov чтобы следить за новостями From d99fc91811cd72665541bcefeccfe2b85ec227e9 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 1 Jan 2026 07:18:58 +0200 Subject: [PATCH 212/217] Update courses 2026 --- Courses/Software-Engineering-2026.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Courses/Software-Engineering-2026.md b/Courses/Software-Engineering-2026.md index bd8a345..20b8bb1 100644 --- a/Courses/Software-Engineering-2026.md +++ b/Courses/Software-Engineering-2026.md @@ -2,15 +2,15 @@ | Course name | Early | Next | Final | Description | | | --- | ---: | ---: | ---: | --- | --- | -| JavaScript | | | Free | Modern JavaScript for Beginners. | [ua](https://youtu.be/FlXsGI7rzWE), [ru](https://youtu.be/HetL0ETbN6Y) | -| Fundamentals | | | Free | A good old Fundamental university course in Software Engineering | [ru](https://github.com/HowProgrammingWorks/Index) | +| [JavaScript](Beginners.md) | | | Free | Modern JavaScript for Beginners. | [ua](https://youtu.be/FlXsGI7rzWE), [ru](https://youtu.be/HetL0ETbN6Y) | +| [Fundamentals](Fundamentals-2025.md) | | | Free | A good old Fundamental university course in Software Engineering | [ru](https://github.com/HowProgrammingWorks/Index) | | OOP for JS | | | Free | Object-Oriented Programming best practices for JavaScript & TypeScript | ua, ru | -| Paradigms | $200 | $250 | $300 | Achieve required code characteristics with paradigms & code styles | ru | -| Async 2026 | $200 | $250 | $300 | A comprehensive practical course on JS asynchronous programming | ru, ua | -| Node.js 2026 | $200 | $250 | $300 | Backend application development and deep dive into Node.js internals | ru | -| Scale 2026 | $500 | $600 | $700 | Scaling Distributed, Interactive, Collaborative & Highload applications | ru | -| Patterns 2026 | | tariffs | | Rethinking GRASP, SOLID, GoF patterns for Frontend & Backend | [ru](https://nodeua.com/Patterns-2025), [ua](https://nodeua.com/Patterns-2025-ua) | -| Code with AI | $200 | $250 | $300 | Share my practical programming experience with AI tools for JS/TS | ua, ru | -| Performance | $200 | $250 | $300 | Combine development & code execution productivity for JavaScript VMs | ru | -| Career Track | $1000 | $1250 | $1500 | Career & job search advisory for software engineering professionals | ua, ru | -| Community | $10/m | | $10/m | Weekly Q&A and livecoding streams, TG community, special lectures | [ua, ru](https://www.patreon.com/cw/tshemsedinov/membership) | +| [Paradigms](Paradigms-2026.md) | $200 | $250 | $300 | Achieve required code characteristics with paradigms & code styles | [ru](https://www.patreon.com/posts/paradigms-2026-146989523) | +| [Async 2026](Async-2026.md) | $200 | $250 | $300 | A comprehensive practical course on JS asynchronous programming | [ua, ru](https://www.patreon.com/posts/async-2026-early-146992165) | +| [Node.js 2026](NodeJS-2026.md) | $200 | $250 | $300 | Backend application development and deep dive into Node.js internals | [ru](https://www.patreon.com/posts/node-js-2026-146992380) | +| [Scale 2026](Scale-2026.md) | $500 | $600 | $700 | Scaling Distributed, Interactive, Collaborative & Highload applications | [ru](https://www.patreon.com/posts/scale-2026-early-146992510) | +| [Patterns 2026](Patterns-2024.md) | | tariffs | | Rethinking GRASP, SOLID, GoF patterns for Frontend & Backend | [ru](https://nodeua.com/Patterns-2025), [ua](https://nodeua.com/Patterns-2025-ua) | +| [Code with AI](Code-With-AI.md) | $200 | $250 | $300 | Share my practical programming experience with AI tools for JS/TS | [ua, ru](https://www.patreon.com/posts/code-with-ai-146992704) | +| [Performance](Performance.md) | $200 | $250 | $300 | Combine development & code execution productivity for JavaScript VMs | [ru](https://www.patreon.com/posts/js-performance-146992915) | +| [Career Track](Career-Track.md) | $1000 | $1250 | $1500 | Career & job search advisory for software engineering professionals | [ua, ru](https://www.patreon.com/posts/career-track-146993217) | +| [Community](Metarhia-Club.md) | $10/m | | $10/m | Weekly Q&A and livecoding streams, TG community, special lectures | [ua, ru](https://www.patreon.com/cw/tshemsedinov/membership) | From 017dd875a17ccf7cb2f5eb3fae0cf8829fcc7e93 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 1 Jan 2026 07:22:08 +0200 Subject: [PATCH 213/217] Fix links --- Courses/Async-2026.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Courses/Async-2026.md b/Courses/Async-2026.md index de46288..c3c1cfc 100644 --- a/Courses/Async-2026.md +++ b/Courses/Async-2026.md @@ -21,7 +21,7 @@ 🗓️ Материалы разделены на самое актуальное (что можно освоить за 1 месяц, если тратить по 2-3 часа в неделю) и огромную библиотеку всевозможных асинхронных абстракций и подходов, какие только есть в JavaScript для выборочного освоения -🎫 До 7 января 2026 (включительно) можно купить за $200 на Patreon: https://www.patreon.com/posts/async-2026-early-146992165 +🎫 До 7 января 2026 (включительно) можно купить за [$200 на Patreon](https://www.patreon.com/posts/async-2026-early-146992165) 🎫 До 14 января 2026 (включительно) за $250 🎫 Далее, в течение всего 2026 года: $300 🎫 Можно купить через Paypal и Payoneer: `timur.shemsedinov@gmail.com` @@ -57,7 +57,7 @@ 🔹 Упор на надежность, поддерживаемость, тестируемость, снижение зацепления 🔹 Примеры и задачи по исправлению скрытых проблемных состояний и data races -🎫 До 7 января 2026 (включительно) можно купить за $200 на Patreon: https://www.patreon.com/posts/async-2026-early-146992165 +🎫 До 7 января 2026 (включительно) можно купить за [$200 на Patreon](https://www.patreon.com/posts/async-2026-early-146992165) 🎫 До 14 января 2026 (включительно) за $250 🎫 Далее, в течение всего 2026 года: $300 🎫 Можно купить через Paypal и Payoneer: `timur.shemsedinov@gmail.com` @@ -221,7 +221,7 @@ ## Как попасть на курс -🎫 До 7 января 2026 (включительно) можно купить за $200 на Patreon: https://www.patreon.com/posts/async-2026-early-146992165 +🎫 До 7 января 2026 (включительно) можно купить за [$200 на Patreon](https://www.patreon.com/posts/async-2026-early-146992165) 🎫 До 14 января 2026 (включительно) за $250 🎫 Далее, в течение всего 2026 года: $300 🎫 Можно купить через Paypal и Payoneer: `timur.shemsedinov@gmail.com` From beb447adb232b56c28492b099d1ddb8250a9bd5f Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 16 Apr 2026 19:05:48 +0300 Subject: [PATCH 214/217] AI talk --- Courses/Talks.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index 85f9278..1714abb 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -1,5 +1,9 @@ # Conference and public talks +## 2026 + +- [🎙️ Всё изменилось навсегда! | Про AI: Тимур Шемсединов, Николай Фельдман](https://www.youtube.com/watch?v=Qa2JDlVsQYI) + ## 2025 - [🎙️ Холивары между парадигмами не имеют смысла — Виталий Брагилевский, Тимур Шемсединов, Деми Мурыч](https://www.youtube.com/watch?v=ES2NPqlDnek) From 6c1d8568b81016d7afa8375bf27e0a89d8321f80 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 30 Apr 2026 23:57:24 +0300 Subject: [PATCH 215/217] Add new talks for 2026 --- Courses/Talks.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index 1714abb..6320fa7 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -3,6 +3,9 @@ ## 2026 - [🎙️ Всё изменилось навсегда! | Про AI: Тимур Шемсединов, Николай Фельдман](https://www.youtube.com/watch?v=Qa2JDlVsQYI) +- [🎙️ Browser is a new OS](https://www.youtube.com/live/nTm8qhB-sjk) +- [🎙️ Куда мы идем: политические режимы в эпоху AI](https://youtu.be/DV6AYHrtBeU) +- [🎙️ Если Вам некогда развиваться](https://www.youtube.com/live/mSVCQ0VzIAo) ## 2025 From e80a3aa9d39b1f46ae653209f96271f5ea36feb7 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 10 Jun 2026 23:50:28 +0300 Subject: [PATCH 216/217] =?UTF-8?q?AI:=20=D0=93=D0=BE=D1=80=D0=B8=D0=B7?= =?UTF-8?q?=D0=BE=D0=BD=D1=82=20=D1=81=D0=BE=D0=B1=D1=8B=D1=82=D0=B8=D0=B9?= =?UTF-8?q?=20=D0=B2=20IT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Courses/Talks.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Courses/Talks.md b/Courses/Talks.md index 6320fa7..c91b175 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -2,6 +2,7 @@ ## 2026 +- [AI: Горизонт событий в IT — Влад Тен и Тимур Шемсединов](https://www.youtube.com/live/17RqGlJjb50) - [🎙️ Всё изменилось навсегда! | Про AI: Тимур Шемсединов, Николай Фельдман](https://www.youtube.com/watch?v=Qa2JDlVsQYI) - [🎙️ Browser is a new OS](https://www.youtube.com/live/nTm8qhB-sjk) - [🎙️ Куда мы идем: политические режимы в эпоху AI](https://youtu.be/DV6AYHrtBeU) From d60aa9f3afd80cb0b9d8548dbf033b2de02ee675 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Wed, 10 Jun 2026 23:53:13 +0300 Subject: [PATCH 217/217] Add more streams --- Courses/Talks.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Courses/Talks.md b/Courses/Talks.md index c91b175..529ffe4 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -2,7 +2,9 @@ ## 2026 -- [AI: Горизонт событий в IT — Влад Тен и Тимур Шемсединов](https://www.youtube.com/live/17RqGlJjb50) +- [🎙️ AI: Горизонт событий в IT — Влад Тен и Тимур Шемсединов](https://www.youtube.com/live/17RqGlJjb50) +- [🎙️ AI: Гонка без стратегии — Тимур Шемсединов и Metarhia](https://www.youtube.com/watch?v=C4giRiwGhB0) +- [🎙️ Мидлу некогда развиваться в IT, AI наступает, кризис — Илья Климов, Тимур Шемсединов](https://www.youtube.com/watch?v=mSVCQ0VzIAo) - [🎙️ Всё изменилось навсегда! | Про AI: Тимур Шемсединов, Николай Фельдман](https://www.youtube.com/watch?v=Qa2JDlVsQYI) - [🎙️ Browser is a new OS](https://www.youtube.com/live/nTm8qhB-sjk) - [🎙️ Куда мы идем: политические режимы в эпоху AI](https://youtu.be/DV6AYHrtBeU)