diff --git a/Archive/WeeklyCall.md b/Archive/WeeklyCall.md new file mode 100644 index 0000000..4360d74 --- /dev/null +++ b/Archive/WeeklyCall.md @@ -0,0 +1,1383 @@ +# Metarhia community weekly call index + +- Для доступа к архиву и участия в созвонах: https://www.patreon.com/tshemsedinov +- Канал с открытыми лекциями: https://www.youtube.com/TimurShemsedinov +- Оглавление курса: https://github.com/HowProgrammingWorks/Index + +## Выпуск №1 (2021-04-17) +``` +0:00 новости (сертификации, metarhia, lowcode) +14:40 зачем выбирать JAVA на новый проект в 2021? +16:15 V8 waitAsync +22:00 пример кода для обращения к методу counter metarhia c защитой глобальной переменной +35:00 node или deno +40:18 как обучать ребенка 6 лет? +55:05 о metarhia +1:44:40 сколько будут стоить специалисты metarhia стека +1:50:00 зависимости postgresql, metarhia +``` + +## Выпуск №2 (2021-04-24) +``` +0:00 start +0:36 ❓ можно-ли вынести поиск скриптов в файлах metarhia в отдельный класс? +9:55 ❓ миллион вебсокетов на двух виртуалках +18:48 ❓ планируется-ли развивать репозиторий консоль в metarhia? +31:13 противоречия между дескриптивными и нормативными моделями +32:15 ❓ в чем идея консоли? +33:28 ❓ в чем главное преимущество stateful подхода? +34:47 ❓ можно-ли писать чистый код на express? +36:44 примеры кода для детей +39:26 ❓ построить видео-чат на metarhia +44:18 лекция о том, как работают client session взаимодействия +52:02 ❓ важна-ли скорость работы web-sockets? +59:43 задача метархии - api за день +1:09:18 примеры вопросов +1:08:40 ❓ планируется-ли доработка курса по базам данных? +1:12:49 ❓ на node нельзя писать корпоративные приложения, потому-что там нет интерфейсов, что ответить? +1:14:52 ❓ как строить бенчмарки? +1:23:00 ❓ есть-ли аналог swagger api для impress в метархии? +1:28:48 ❓ есть-ли протокол для стриминга в metacom +1:34:16 ❓ Тимур, почему вы плохо относитесь к криптовалютам? +``` + +## Выпуск №3 (2021-05-01) +``` +0:00 start +0:30 ❓ можно-ли писать SSR SPA с бекендом на metarhia? +9:48 ❓ как написать свой домен? +12:45 лекции для понимания как моделировать предметную область при помощи структур данных +13:55 Prisma +18:47 пример работы metaschema +37:47 где используются графы? как использовать графы в соц. сетях +39:52 где на сервере хранить большое количество картинок +45:52 ❓ micro/macro tasks в браузере и node.js (материалы) +56:22 ❓ можно-ли выложить в телеграм-канал ссылку на торрент на книгу you don't know js? +1:03:50 ❓ будут-ли uml-схемы в документации metarhia +1:22:17 ❓ почему задачи CICD, мониторинга, управления не автоматизированы через machine learning +1:29:06 ❓ можно-ли валидировать приходящие с клиента данных до попадания в javascript? +1:37:04 ❓ в репозитории common находятся оптимизированные методы js? +1:43:15 ❓ d.ts файлы в metarhia нужны для описания интерфейсов? +1:49:25 ❓ в видео "сессии в metarhia" к каждому юзеру будет подвязываться объект контекст, что в нем нужно хранить? +1:58:15 ❓ открытость валидационных схем на клиенте является уязвимостью? +1:59:17 ❓ планируется-ли поставлять версию TLS node вместе c metarhia? +2:03:13 когда записи стримов метархии станут публичными? +``` + +## Выпуск №4 (2021-05-08) +``` +0:00 start +0:20 ❓ какие могут быть проблемы/преимущества с точкой входа над несколькими структурами данных? (graphQl) +9:30 ❓ можно-ли комбинировать подходы на бекенде? +12:10 ❓ пример реализации data-sentry подхода в архитектуре систем +18:08 ❓ в каких случаях graphQl подходит +22:00 ❓ объяснение цитаты про типы и года опыта +36:09 ❓ какие вещи из js нельзя написать на typescript +42:17 ❓ плагины для eslint, babel, которые идентифицируют проблемы в коде, типах +50:48 ❓ причина непопулярности uml диаграм в нехватке автогенерации? +58:52 ❓ возможно-ли создание инструментов по миграции из существующих систем в metarhia? +1:10:05 hegel анализатор js +1:19:37 V8 %getOptimizationStatus optimization +1:24:45 ❓ панель управления для metarhia +1:34:03 ❓ можно-ли сгенерировать user-interface с помощью metarhia? (scaffolding) +1:53:40 ❓ можно-ли дать доступ с клиента к нечуствительным полям в бд? +1:57:24 ❓ пагинация +2:00:20 ❓ планируется-ли поддержка многоязычности? +2:01:29 ❓ проблема масштабируемости meteor и схожесть в идеях с metarhia +2:05:09 ❓ сертификация metarhia +``` + +## Выпуск №5 (2021-05-15) +``` +0:00 start +0:15 race condition +10:40 виды race condition +10:50 пример "гонка по управлению" +31:05 ❓ о metatests +50:20 ❓ использовать finalizationRegistry для выхода из сеанса +1:03:20 новости metarhia +1:17:20 схема структуры БД авторизации/аутентификации (объяснение, пример модификации) +1:58:10 ❓ есть-ли в metasql pgpromise работа с файлами sql, prepared spacements на базе сравнения запросов с ранними +2:05:35 ❓ вы пробовали cloudflare workers? +2:07:23 ❓ мнение по поводу nodered +``` + +## Выпуск №6 (2021-05-22) +``` +0:00 start +0:10 ❓ часто пишу if в коде, при изучении автоматного программирования есть нехватка примеров кода +5:53 ❓ главная проблема nest +15:15 ❓ почему пишут REST? +28:16 ❓ почему использую JWT? +31:07 ❓ основная причина выбора технологии +38:53 ❓ репутационный критерий при выборе технологии +40:36 ❓ если в metarhia избегать ООП, как объеденять наборы функций в сущности? +42:50 ❓ что вам хотелось бы видеть в рамках визуализации абстрактного синтаксического дерева? +44:40 ❓ кто может сделать код-ревью кода на metarhia? +47:45 о документации metarhia +50:30 ❓ сложность презентаций +51:47 я абсолютно не ориентируюсь на то, что метархию будут брать разработчики +53:17 ❓ набирать начинающих программистов для metarhia +1:05:42 ❓ сценарии ответов на виды кибератак +1:18:44 ❓ пример кода для игр на node для метархии +1:21:34 ❓ версионирование бизнес модели +``` + +## Выпуск №7 (2021-05-29) +``` +0:00 start +0:55 ❓ как метархия будет работать с микросервисами и сессиями +7:00 ❓ как писать наследование без классов и интерфейсов? +12:54 ❓ стримы в node +27:00 ❓ что должно лежать в папке domain в example +32:00 ❓ будет-ли у метархии поддержка стриминга видео? +35:55 ❓ будет-ли пример реализации oauth 2.0 на практике, поддержка oauth 2.0? +42:30 ❓ изменение структуры данных в памяти +53:15 ❓ почему декораторы в nest это плохо? +1:14:45 ❓ реализация менеджмента турнира +1:33:29 планы metarhia +1:44:03 перечисление фич, которые уже реализованы в metarhia +1:49:11 почему нужно перезапускать процесс node, если один реквест привел к exception +1:57:54 ❓ существуют-ли механизмы отслеживания потребления ресурсов? +2:05:00 ❓ система нагрузочного тестирования в metarhia +2:06:40 ❓ как происходит горячая перезагрузка? +2:08:17 ❓ приложения на metarhia и на другой технологии для сравнения производительности +``` + +## Выпуск №8 (2021-06-12) +``` +0:00 про виды утечек памяти +10:54 ❓ чем отличается hip от stack +16:20 ❓ легковесный и тяжеловесный сборщики мусора +22:22 ❓ почему библиотека cluster внутри node.js плохо утилизирует ресурсы +27:25 ❓ как возможно отправить метархии event на клиента +33:33 ❓ когда metarhia станет популярной? +59:12 ❓ память в nodejs, metarhia +1:10:40 ❓ как работать с use case? +1:42:05 ❓ ошибка при ограничении прав в системе прав +``` + +## Выпуск №9 (2021-06-19) +``` +0:00 start +0:28 ❓ client в metacom будет рефакториться? +6:00 ❓ пример отправки event от user к user +10:44 новости +19:36 список библиотек и планы +35:16 ❓ выбор зависимостей в impress (node http, socket) +40:00 про субд, globalstorage +1:02:15 ❓ будет-ли возможность подключить другую библиотеку для web sockets +1:07:10 ❓ какой нужен уровень для написания продуктов на базе metarhia? +``` + +## Выпуск №10 (2021-06-26) +``` +0:00 start +0:20 новости metarhia +1:40 почему null - это плохо? +29:45 ❓ преимущество масштабирования тредами, а не процессами +43:56 ❓ тестирование внутри worker'a +56:56 ❓ планы на лето +1:36:00 ❓ банки и web socket +1:47:43 ❓ оценка кода обертки http(jwt, params) для rpc +1:51:55 ❓ вопрос по class Procedure в impress +``` + +## Выпуск №11 (2021-07-03) +``` +0:00 start +1:00 ❓ как не забыть то - что выучил? +11:00 ❓ как заинтересовывать детей в программировании? +19:20 ❓ null для object, undefined для скалярных? +29:45 ❓ защита от ddos атак в metarhia +38:27 ❓ как попасть на проект на metarhia? +52:12 ❓ weakMap и остальные... +58:35 ❓ stateless подход node.js +1:19:40 ❓ copilot +1:31:05 ❓ в каких компаниях используется metarhia? +1:47:40 ❓ globalstorage и сложности +1:55:05 ❓ обновления библиотек metarhia без changelog +2:04:40 ❓ пакет для ssh связи +``` + +## Выпуск №12 (2021-07-10) +``` +0:00 новости +11:35 ❓ заложен-ли канал связи между инстансами метархии между разными серверами +13:25 ❓ можно-ли будет использовать cursor в плагине для crud? +37:58 ❓ пример генерации форм на клиенте +47:00 nodered, bpmn +1:39:30 ❓ почему нужно начинать с grasp, а не с solid? +``` + +## Выпуск №13 (2021-07-17) +``` +0:00 start +1:00 ❓ когда можно использовать require в циклах? +12:42 ❓ код class Cache в impress +36:40 ❓ преимущества node перед другими ЯП +41:00 про ООП +1:07:10 портирование проекта с nodered на metarhia +1:16:02 ❓ как вы себе представляете прикладной код? +1:21:30 ❓ почему nocode системы пытаются скопировать отвратительные паттерны друг у друга? +1:31:00 нейросети и код +1:53:20 ❓ кто будет на holy js? +``` + +## Выпуск №14 (2021-07-24) +``` +0:00 start +0:30 ❓ example logout пользователя (работа metarhia c контекстом) +41:50 ❓ для чего используется класс Resourses в impress +50:35 ❓ про загрузку данных разных форматов, планы metarhia, системные и прикладные программисты +1:00:00 ❓ про планировщики в линуксе, metarhiа +1:48:52 ❓ cursor с бд +``` + +## Выпуск №15 (2021-07-31) +``` +0:00 планы и новости +11:45 ❓ вычислимые поля в metaschema (discuss) +30:02 ❓ отдельный сервис для управления нагрузками +39:48 почему R&D офис не должен быть прибыльным +54:46 ❓ блокировки, регистр хранения данных в metarhia +1:15:50 ❓ хватает-ли времени на семью? +1:19:05 ❓ машинное обучение на js +1:20:37 ❓ плагины +1:33:10 написание бизнес-логики на metarhia +1:42:30 про базы данных +1:44:40 про языки программирования и их возможности +1:48:58 про тип null +1:50:00 ❓ как происходит проверка по схемам в metaschema? +1:53:20 ❓ проблемы typescript +1:56:00 ❓ стримы в node +2:06:18 ❓ вопрос по коду metaschema +``` + +## Выпуск №16 (2021-08-07) +``` +0:00 новости metasqls +8:00 новости metacom +22:00 медицинская система, украинские гос. сайты и анархия +43:02 инстаграмм и вопросы +1:06:10 ❓ docker +1:12:50 ❓ про сервера +1:22:33 ❓ сказка-презентация "шапка полная дэвов" +1:26:30 ❓ крупные банки и node? +1:39:05 ❓ почему люди работают по найму? +1:47:05 ❓ что вы думаете о Илоне Маске? +1:51:43 ❓ какой процент успешных студентов у Тимура? +1:55:00 ❓ почему на галерах плохо работать? +``` + +## Выпуск №18 (2021-08-21) +``` +0:00 новости и изменения в стеке metarhia +13:00 про npm пакеты и зависимости +27:40 нововведения github +37:17 ❓ выполнение c/c++ в node +48:45 ❓ metarhia принимает и http и ws? нужно-ли как-то переключаться между ними? web-hooks? +57:00 ❓ multithread реальны или виртуальны в node? +1:00:00 ❓ проблемы производительности и абстракций +1:36:20 ❓ использование google cloud +1:37:00 ❓ про обучение программированию, вопросы по технологиям и тд +``` + +## Выпуск №19 (2021-08-28) +``` +0:00 start +1:35 автоматное программирование +46:24 конец лагов +46:25 про фронтенд +1:05:40 прогресс metarhia +1:07:50 дети, обучение, менторинг, ревью кода +1:19:40 пелевин, книги +1:36:00 ❓ где лучше хранить изображения? (бд/файловая система) +1:49:35 ❓ мультиязычность в образовательном проекте +``` + +## Выпуск №20 (2021-09-04) +``` +0:00 start +0:01 обучение, города, люди +4:00 ❓ metacom обновления, планы +24:37 ❓ globalstorage, cursor, metasql планы +1:00:50 ❓ frontend подход реализации с cursor +1:15:15 ❓ будет-ли автодокументация api как в swagger в metarhia? +1:27:50 ❓ образовательная программа +1:46:00 ❓ автоматное программирование +1:52:50 книга "Модели данных" +2:00:00 антипаттерны +``` + +## Выпуск №21 (2021-09-11) +``` +0:00 start +0:01 обновление библиотек metarhia +5:00 баланс тредов round robin +13:39 ❓ решает-ли вышеописанный код проблему совмещенной памяти у нескольких воркеров? +26:05 ❓ обмениваться буферами можно внутри node или браузера +29:20 ❓ полезные функции v8 +30:50 ❓ impress node.js context +34:40 ❓ abort controller +49:50 R&D офис в КПИ, образование и научная деятельность +1:05:30 ❓ куда идти учиться сыну 16лет +1:14:00 R&D +1:15:00 как будет работать менторинг при metaeducation +1:21:40 ❓ вуз в Польше для поступления +1:22:44 ❓ back pressure для стрима с "медленным" клиентом +1:42:10 ❓ как банки использовали nodered +1:44:47 ❓ почему Тимур решил выбрать js? +2:04:30 ❓ мысли про mvp из говна и палок и выкуп стартапов большими компаниями? +``` + +## Выпуск №22 (2021-09-18) +``` +0:00 start +0:55 новости платформы +9:56 диаграмма для metahealth, metaclass +17:30 ❓ как грамотно построить клиентские приложения на node.js +25:15 ❓ постоянно перезапускать асинхронную функцию (async forever) +47:32 ❓ работают-ли стримы со ссылочными типамид данных +53:07 ❓ оптимизация v8 для работы с данными +58:20 система плагинов +1:12:00 менторинг на проектах и преподавание для детей +1:28:45 ❓ как получать 30к в месяц? +1:57:35 ❓ в какую сторону мыслить в придумывании нового +2:02:50 ❓ прикладная задача по передаче данных +``` + +## Выпуск №23 (2021-09-25) +``` +0:00 новости библиотек +8:04 ❓ репозиторий для примера написания бизнес-логики +11:42 ❓ про metaforms +18:20 ❓ require и imports +25:48 ❓ не пробовали использовать какой-нибудь frontend фреймворк? +1:07:00 ❓ изоляция пользователей внутри приложения по разным бд +1:22:20 ❓ где и как можно применять автоматное программирование +1:30:00 искуственный интеллект, node, js +``` + +## Выпуск №24 (2021-10-02) +``` +0:00 новости технологического стека +9:51 ❓ вопросы после попытки переноса проекта на metarhia +41:00 ❓ file system watcher + sandboxind для подгрузки архива с исходным кодом +49:00 ❓ загрузка import в песочницу +53:00 ❓ вопросы после попытки переноса проекта на metarhia (2 часть) +1:16:00 ❓ когда появится TCP? +1:25:00 ❓ в metaschema можно писать произвольные метаданные? +1:26:30 ❓ schemas, выполнение кастомного sql +1:33:50 ❓ развитие globalstorage +1:36:15 ❓ в какой последовательности смотреть лекции Тимура +1:38:20 ❓ подскажите макбук для покупки +1:54:10 ❓ тестирование апи с postman, http, безопастность +``` + +## Выпуск №25 (2021-10-09) +``` +0:00 start +0:08 баг в performance hook в node +4:15 финансирование образовательных проектов +7:06 performance hook поиск бага +52:10 ❓ прогресс с миграциями +56:40 фикс багa metacom +``` + +## Выпуск №26 (2021-10-16) +``` +0:00 новости metacom, migrations, балансировщик на event loop utilization, issue с тегами hacktoberfest, metaedu +9:10 ❓ что с globalstorage +12:50 ❓ есть-ли возможность помочь с разработкой metaschema (как контрибьютить в metarhia) +44:50 ❓ вы довольны прогрессом по metaeducation и metahealth? +51:50 ❓ про handy.ai +1:10:45 ❓ планируется делать менеджер памяти? +1:19:25 ❓ про metagui и фронтенд +1:29:00 ❓ пробовали nocode инструменты для создания интерфейсов? (про идею развития пользовательских интерфейсов) +``` + +## Выпуск №27 (2021-10-23) +``` +0:00 start +0:55 ❓ какие ошибки сервера кидать на клиент +6:00 ❓ авторизация через jwt и два сервера +7:50 why jwt is bad for authentication +11:00 планы, конференции, +15:30 баг с исправлением node +``` + +## Выпуск №28 (2021-10-30) +``` +0:00 новости +2:20 ❓ почему metaschema вместо jsonscheme? и про metarhia +7:00 ❓ как интегрировать свой проект с metarhia? (цель metarhia) +47:10 ❓ последовательность действий для создания функциональности метархии для open sourse +1:00:00 ❓ ссылки на созвоны по проектам metarhia education +1:02:40 ❓ как писать документацию к библиотекам metarhia? +1:05:00 ❓ discussion горячая загрузка интерфейсов +1:11:00 ❓ как под капотом работает async await? +``` + +## Выпуск №29 (2021-11-06) +``` +0:00 новости +4:05 строительство метагорода +15:04 ❓ metalogin проблема пустых файлов +21:00 ❓ impress создание стартера для каждого провайдера +23:50 ❓ можно-ли нормально жить с микросервисами? +25:00 ❓ как экспортировать окружение бизнес-логики c одного подхода(шина) на другой(редис)? +40:30 ❓ git слишком часто делаю merge ( как пользоваться гитом) +1:04:00 обучение обучению, youtube лекции от сторонних людей +1:12:20 ❓ review примера сервера на node +1:35:40 ❓ избегание циклических зависимостей при импортах +1:50:00 ❓ хранение бизнес логики в бд +2:01:20 ❓ автоматическая генерация субтитров на английском к видео Тимура +``` + +## Выпуск №30 (2021-11-13) +``` +0:00 новости +20:35 ❓ noroutine issue syntax in thread +21:37 impress планы +30:20 ❓ динамически создать эндпоинт rpc, создание эндпоинта запросом с клиента +37:33 пример подключения к стороннему сервиса для рассылки имейлов +42:31 new Date и throw exception +47:38 идея метапрограммирования +49:35 какого типа таблицы можно переносить в metarhia? (Интервальное дерево на триггерах, процедурах) +54:05 статьи по теме «Метапрограммирование» +56:30 про преподавание в KSE +59:00 задача по программированию и книга «структура и интерпретация компьютерных программ» +1:07:20 лекция по ФП Илья Кантор +1:12:35 пройти сертификации +1:13:34 видео, стримы, сообщество +1:16:40 про UI +1:21:40 notion, метавселенные +1:28:45 google и попытки нанять Тимура +1:34:04 про Дородичева +1:34:45 node, go, noroutine +1:40:35 стратегия выборта технологии +1:41:50 биндинг сложных кусков кода +1:44:35 развитие js и планируемые фичи +1:59:30 подменить функцию и вызвать ее внутри подменяемой +``` + +## Выпуск №31 (2021-11-20) +``` +0:00 новости (дуэли, доклады, телевиденье, c#) +20:00 как ставить метархию? +21:50 почему нельзя принимать случайный код от клиента? (Защита, виды атак) +52:12 git и gitlab +54:50 ruby и node +58:35 на чем Тимур писал до node +59:00 actionScript coffeScript flash и javascript +1:07:40 notion +1:10:00 сколько тредов можно держать на одной машине (обзор сервисов для аренды железа) +1:42:28 почему Тимур не переедет а кремниевую долину +1:46:05 чем плох амазон +1:56:45 чем занимается Georg +``` + +## Выпуск №32 (2021-11-27) +``` +0:00 новости +5:55 control flow из нескольких доменов, либов +30:10 impress как завершить сессию? +32:10 подсчет количества запросов от клиента +32:45 trump data antipattern +42:10 автомохдание конфигурации в impress +50:15 можно-ли запретить обращение к api из чужих приложений +51:45 можно-ли ограничить ресурсы, если обращение к api происходит из чужих приложений (ddos detection, error detection) +59:20 о дискуссии java vs node +1:07:20 сертификации, требования +1:10:55 как контрибьютить эффективнее +``` + +## Выпуск №33 (2021-12-04) +``` +0:00 новости +9:55 начал учить c++, что делать дальше (как писать программы качественно) +41:30 процедурное программирование +44:00 создавать-ли при отсутствии сети полную копию бд в кеше браузера? +49:10 metacomponents и вопросы про манипулирование dom +1:01:40 как работать со схемами в metarhia +1:05:10 задача про бизнес логику +1:16:40 impress при запросе на api есть возможность узнать что в переменной PROCESS +1:42:10 доступ к файловой системе как на гугл драйве для клиента +1:47:00 на сколько часто получается просматривать issue в гитхабе +1:52:00 metaschema зачем тесты на преобразование в ts interface +1:55:30 proposal structs +``` + +## Выпуск №34 (2021-12-11) +``` +0:00 новости +3:00 контрибьюты в метархию +9:00 разница между кешом и состоянием +13:00 про тестирование и поиск багов +26:05 передача сообщений между тредами защищена? +43:15 один из способов развиться как разработчик +47:00 про начинающих разработчиков, CTO, lead и выбор технологий +54:18 🦜 +56:30 metahealth +58:35 использование proxy как стейт-менеджер +1:03:55 log out, application firewall +1:06:13 discuss CORS +1:12:30 почему не используете map или filter, а только условия или for +1:15:50 как при написании программы понять что использовать, Class или function и про стиль кода на конкретных примерах +1:34:30 можно-ли сделать мультитенантным и подгружаемым определение схем помимо методов +1:39:40 как обойти ограничения по доступу некоторых ресурсов в России, Китае, США +``` + +## Выпуск №35 (2021-12-18) +``` +0:00 новости +2:30 токены сессии через cryptoRandom, ядро безопастности, логгирование событий +12:45 концепция системы безопастности google и metarhia +17:20 система прав в linux, мандатная система +23:00 подключение сервера конфигурации +39:05 система отказоустойчивости +50:40 когда добавят nodoroutine в metarhia? +1:00:13 отношение к cookie +1:07:22 программа для кассовых сервисов +1:10:40 описание мультисерверной деструктуризированной сети с metarhiaми как нодами +1:15:40 контекст сессии +1:22:40 o cubernetes +1:33:02 issues impress, metaschema, metacom +1:47:38 какую информацию Тимур рекомендует хранить в контексте сессии +1:53:55 metacom +2:01:08 созвон по вопросам node.js +``` + +## Выпуск №36 (2021-12-25) +``` +0:00 новости, преподавание студентам +9:30 примеры написания приложений по DDD +16:00 технология и развитие сообщества +18:30 проблемы nodered, corezoid, lowcode системы +22:45 про создание лекций для лоукодеров +24:30 опыт написания программ на corezoid +30:00 задача:система транзакций, трансфер денег +49:40 абстракции для построения блокировки на уровне сервера предприятия +50:30 концепция для выполнения нескольких транзакций одновременно +1:15:30 почему тяжело внедрить node в банковские системы +1:18:40 про node, java, c++, assembler, python, ruby +1:37:35 review PR в node +1:54:35 болезнь всех прикладных проектов +2:06:50 стоит-ли идти ребенку в ВУЗ на IT специальность, школа экономики (KSE) +``` + +## Выпуск №37 +``` +0:00 поздравления +1:10 кто что сделал с помощью metarhia? +2:05 swayer, mol +6:25 KSE +9:25 коммуникационная платформа для оптимизации задач коммуникации внутри и вне бизнеса, handy.io +14:20 R&D компании на базе metarhia +21:00 финтех приложения на metarhia, контрибьюты в экосистему metarhia +26:40 стримы, metacom, serverless +32:35 добавляйте заметки о видео в комментарии +35:35 хочу завести канал на ютубе, как покрыть российскую аудиторию если я записываю видео на украинском +39:32 документация, примеры кода +42:45 основная задача swayer +44:50 startaps +53:00 соц. сети в описании под видео +``` + +## Выпуск №38 +``` +1:30 Обновление курса программной инженерии +5:33 Создание юрлица для продуктовой разработки на Метархии +9:23 Примеры кода из обновленного открытого курса +31:58 Архитектура и масштабирование приложений на технологическом стеке Метархия +57:02 Про R&D для поддержки проектов и развития техстека Метархия +58:50 Организация сообщества Метархия +1:09:17 Кейсы внедрения Метархии +1:22:48 docker compose +1:26:40 streams +1:29:05 офисы для R&D, продукты +1:39:04 гуляйполис +1:47:10 проблемы продвижения метархии на проекте +1:58:00 IT рынок Германии +1:59:00 проблемы продвижения метархии на проекте +``` + +## Выпуск №39 (2022-01-15) +``` +0:00 правила по структура еженедельных звонков +5:40 новости +41:30 новости по мультитенантности +48:40 unreal editory blueprint +55:30 отзыв о foxminded +1:05:55 возможности системы безопастности +1:38:48 распределенные чаты, кластеризация +1:45:20 метархия ищет CTO +``` + +## Выпуск №40 (2022-01-22) +``` +0:00 подготовка новостей +2:45 новости (swayer, metaschema, книга, активность в сообществе) +23:12 база данных SQL, бизнес-логика в базе +46:05 статьи про базы данных на хабр +48:25 предложения по расширению metaschema +1:03:00 стримы +``` + +## Выпуск №41 (2022-01-29) +``` +0:00 подготовка новостей +8:32 новости (swayer, impress, metaschema, metacom, metautil, книга, активность в сообществе) +41:30 пример grps сервера на метархии +44:20 написание бизнес-логики на агрегатных состояниях (OLAP, OLTP) +56:20 все про стартапы +1:44:15 балансировка ws подключением +1:48:40 режим для тестирования для работы на одном треде +1:53:20 скрытые возможности metarhia +``` + +## Выпуск №42 (2022-02-05) +``` +0:00 намечание вопросов (metaschema, low-code, стримы) +7:52 low-code +1:16:00 таблицы состояний для стейт-машин +1:32:20 как скрыть репозиторий, создать организацию в гитхабе +1:35:30 что происходит в мире? +1:40:20 гуляйполис +1:41:45 как считать косты, если используешь metarhia +``` + +## Выпуск №43 (2022-02-12) +``` +1:00 low-code дополнения +6:45 подготовка новостей +8:27 новости +16:38 лекции по metrahia +22:34 low-code какие еще функции, кроме перечисленных, нужны +31:30 как впечатления от контрибьюта в mdn +34:30 low-code events +44:50 новости от Georg +45:15 best speakers award +48:20 low-code +1:12:00 metaschema enumerable тип блокировать или нет +1:25:00 идея для low-code +1:30:00 документация +1:37:00 metacom, fingerprint, ip, geodata, web api, macaroons +1:48:00 пароли +1:58:30 война и политика +``` + +## Выпуск №44 (2022-02-19) +``` +0:00 план звонка +6:04 новости +12:50 метрики для ноды working thread +34:45 metaschema, как использовать для внешних библиотек, пример кода metaforms +1:09:00 web 3.0 blockchain, cryptocurrency +2:02:30 стих "В ожидании варваров" +``` + +## Выпуск №45 (2022-02-26) +``` +0:00 война, новости +``` + +## Выпуск №46 (2022-03-12) +``` +0:00 новости, политический манифест метархии +7:07 интеграция blockchain c metarhia, ethereum, prisma +22:30 социальные сети нового типа +32:30 перемещение информации на сервера за границей +39:30 интернет в Германии +43:30 "unlimited" трафик в hesner +51:00 ddos и хакинг +``` + +## Выпуск №47 (2022-03-19) +``` +0:00 подготовка новостей +11:10 новости +21:40 npm пакет, проблемы ddos +30:00 стартапы и группы в сообществе metarhia +31:20 нет-ли у кото-то опыта с JointJS? +33:00 о текущей ситуации +52:00 ликбез "какова ценность blockchain" +1:04:30 на чем будет писаться СУБД +1:14:40 globalstorage реляционные отношения +1:14:50 СУБД rust, многопоточность +1:36:00 магия, js, metarhia, python +``` + +## Выпуск №48 (2022-03-26) +``` +0:00 новости +12:40 метагалера подробности +52:00 code review +1:17:20 ❓ как реализованы права в metarhia? +1:26:00 ❓ про "биос" - один из проектов метагалеры +1:37:00 про изучение немецкого +1:40:00 ❓ цель создания метагалеры +``` + +## Выпуск №49 (2022-04-02) +``` +0:00 start +1:30 лендинги для продуктов метагалеры +6:35 книга "Метапрограммирование" +9:00 ❓ вопросы о разработке metaschema +16:30 ❓ нужна-ли возможность перекладывания sql данных в no sql +43:00 отличие open-source разработки от коммерческой +45:00 ❓ metaschema +59:00 про конкуренцию +1:05:30 ❓ вопросы по документации +1:23:45 как исправить звуковую петлю +1:27:00 ❓ вступительня кампания в вузах украины без ЗНО +1:31:00 преподавание в KSE +1:41:00 олимпиады по программированию +1:55:40 ❓ как учился программированию Тимур +1:56:30 про java +2:01:00 metaschema, препроцессор +``` + +## Выпуск №50 (2022-04-09) +``` +0:00 новости +2:20 таймкоды и гит репозиторий со списком таймкодов для еженедельных видео +6:58 образовательный проект на metarhia +10:45 новости из Германии (1С, складские системы учета товаров, автоматизация производств, бизнеса) +29:25 кто выиграл на конкурсе "Лучший IT спикер года"? +31:00 текущая ситуация по развитию школ разных отраслей, Канторович, Глушков, Лебедев +42:28 моделирование бизнес-процессов при помощи low-code +1:07:01 форма "Заказ товара", обсуждение +1:32:30 пример такой формы в 1C +1:50:43 на каждом блоке должен быть вариант неуспешности? +1:58:05 разработка мобильной игры в браузере +1:59:45 тестирование google meet +``` + +## Выпуск №52 (2022-04-23) +``` +2:55 система безопастности для npm модулей +13:04 вещи, которых не хватает в metarhia +16:32 конференция metarhia, ютуб каналы +17:44 low code с помощью md файлов +55:45 сети Петри +1:01:15 о статье Дубилета +1:31:44 application firewall +1:33:10 после последнего обновления impress все ошибки на сервере возвращаются как 500 +1:36:10 менторство +1:43:10 куда можно присылать вопросы в текстовом виде? +1:57:20 добавления резервирования к схеме +``` + +## Выпуск №53 (2022-04-30) +``` +0:43 критика low-code систем +1:20 прототип для low-code, библиотека low-script +12:06 отличие от других low-code продуктов +19:28 поздравление Георга с днем рождения 🥳 +21:25 о важности встреч в субботу +24:20 мультитенантность, metaschema, metacom +29:30 модули для библиотек бизнес-процессов, retool, integromat +35:59 линейные скрипты и обработка ошибок в low-code +47:35 валидация +50:10 настройки для линтера +58:33 проектирование мультитенантности +1:04:00 тарифные планы для разных вариантов тенантности +1:05:22 шардинг, изоляция по ключам +1:21:30 площадка внутри системы для создания скриптов +1:33:40 интеграция метархии в проект с rest api, авторизация +1:43:24 вопрос к зрителям «насколько универсальна нотация в md файле?» +1:56:05 про оплату работы таланта +2:01:05 поздравления Георга +2:02:14 где Алексей Боднарчук +2:07:58 как найти невесту схожего культурного контекста +``` + +## Выпуск №54 (2022-05-07) +``` +0:00 планы +2:15 пример работы разных модулей 1С +59:40 metarhia subsystems roadmap +1:59:00 swayer +2:08:30 компонент для автоматизации деплоя +2:18:00 остальные предложения и идеи +2:23:15 механизм для контрибьюта +``` + +## Выпуск №55 (2022-05-14) +``` +0:00 о metaschema +14:40 roadmap, временные решения вместо модулей +25:02 metacalc issues +32:50 проблема отсутсвия багрепортов от компаний +38:00 про баги +45:11 metamail/nodemailer +47:22 LaTeX +51:23 интеграции +56:57 предложение по архитектуре +1:09:55 почему нельзя писать запросы сразу на SQL +``` + +## Выпуск №56 (2022-05-21) +``` +0:00 план звонка +3:08 о криптовалютах и построение систем на metarhia +19:20 бухгалтерская, медицинская системы +36:00 metaschema и мультитенантность +50:00 идеи нужных модулей +1:00:25 возможность системного вызова +1:04:50 система модульности, подгрузка модулей +1:15:20 сборка фронта на беке +1:29:00 сборка на докере +1:34:00 поддержка swayer в браузерах +1:41:30 документация user-story +1:51:50 у кого есть опыт работы с криптовалютами? +1:56:00 вакансии +1:58:30 среда разработки, В-ОS +2:11:35 обновление impress +2:17:30 перенос части проекта из B-OS +2:18:09 сколько у вас есть времени для контрибьюта? +2:20:25 реально-ли написать основную часть системы за пол года? +``` + +## Выпуск №57 (2022-05-28) +``` +2:00 обновления в roadmap (metacom, multi-tenancy, event bus) +27:40 oAuth2, SSO +45:50 новые ютуб каналы, поездка +48:34 как подаваться на конференцию +50:26 yaml, metascheme, json +``` + +## Выпуск №58 (2022-06-04) +``` +1:25 как прошел выезд? +13:55 тех. Стек, B-OS +15:13 что не сделано по roadmap +17:23 модули, ожидающие разработки +21:00 фронтенд-библиотека, платёжная система +23:27 о почтовых протоколах +36:50 docker +59:20 nodemailer как временное решение +1:12:25 реализация oAuth +1:19:20 cubernetes, оркестрация +``` + +## Выпуск №59 (2022-06-11) +``` +0:00 изменения metaschema +3:00 приватные поля для объекта, класса +9:00 аргументы для презентации метархии +12:00 интеграция oAuth +18:10 описание multitenancy +36:50 онбоардинг новых людей +39:15 школа на базе метархии, курсы по программированию +43:50 хранение токенов на backend +1:04:00 хранение бизнес-логики +1:15:27 объявление для менторов +1:16:16 автоматизация развертывания +1:27:30 prometeus, мониторинг для мультитрединга +1:40:45 tcp/tls между нодами +``` + +## Выпуск №60 (2022-06-18) +``` +0:30 review metaschema +45:15 новые фичи ecmascript и стиль кода +1:09:04 о критических частях роадмапа, мультитенантность, global storage, базы +1:16:40 oAuth2 client +1:17:28 храние данных в оперативной памяти или redis +1:20:30 разработка filestorage +1:23:10 email интеграции с linux smtp серверами +1:35:32 metarhia c fastify +1:37:50 crud плагины для metasql +1:38:45 стримы для metacom, тесты, баги +1:39:47 metamail, roadmap +1:45:51 multitenancy +1:55:40 бюджет для разработчиков, правила code-review, code-style +``` + +## Выпуск №61 (2022-06-25) +``` +2:05 лендинг библиотек metarhia +2:35 новые возможности в metaschema +1:10:40 есть-ли пример реализации приложений на новой metarhia? +1:13:45 поиск людей с опытом подключения имейлов, онбоардинг новых людей +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 а не с++, нейросети +``` + +## Выпуск №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 презентация +``` + +## Выпуск №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 +``` diff --git a/Courses/Advanced-2025.md b/Courses/Advanced-2025.md new file mode 100644 index 0000000..cbefd89 --- /dev/null +++ b/Courses/Advanced-2025.md @@ -0,0 +1,68 @@ +# Programming Fundamentals (part 2) + +- JavaScript and TypeScript machinery + - Timers: https://github.com/HowProgrammingWorks/Timers + - 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 + - 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 + - Singleton: https://github.com/HowProgrammingWorks/Singleton + - 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 + - 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 +- 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 diff --git a/Courses/Architecture-2025.md b/Courses/Architecture-2025.md new file mode 100644 index 0000000..d66c819 --- /dev/null +++ b/Courses/Architecture-2025.md @@ -0,0 +1,123 @@ +# 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. Domain Specific Languages: DSL, AST, LISP +10. Command, QueryObject, CQS, CQRS, EventSourcing +11. Messaging: MQ, Pub/Sub, Pull +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 +16. Data access patterns +17. Asynchronous programming +18. Imperative shell, Functional core +19. Multi-paradigm programming in Architecture +20. Metaprogramming + +## 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 +- SOA: web services, microservices, serverless +- Data warehouses and DBMS: relational, noSQL, columnar, key-value +- 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 +- 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: 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 +- [Модули, слои, структура проекта, песочницы в 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 diff --git a/Courses/Async-2024.md b/Courses/Async-2024.md new file mode 100644 index 0000000..88ee181 --- /dev/null +++ b/Courses/Async-2024.md @@ -0,0 +1,176 @@ +# Асинхронное программирование 2024 + +💡 Объем материала: 10 часов лекций + необязательные материалы, созвоны для ревью кода и ответов на вопросы: 2 часа в неделю в течении года, репозитории с примерами кода, задачи по всем темам. + +Те способы писать асинхронный код, которые мы использовали 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) + +## Содержание + +Важные аспекты нового курса: + +- Концентрация на практическом применении (примеры кода из реальных проектов) +- Актуальность и соответствие стандартам по состоянию на 2023-2024 +- Задачи и разбор их решений, семинары, ревью кода (курс это не только видео) +- Рекомендации к выбору стиля и абстракций асинхронности под задачу +- Внимание к корректной обработке ошибок во всех стилях асинхронности +- Упор на надежность, поддерживаемость, тестируемость, снижение зацепления +- Примеры и задачи по исправлению скрытых проблемных состояний и 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 или редактор + +Чем это курс не является: это не чтение документации, не курс по библиотекам и фреймворкам, не повторение старого курса, не лайвкодинг и не мастеркласс, не стрим. Новый курс - это максимально сконцентрированная информация и практические задачи как для прикладного, так и для системного программирования со сравнением этих подходов. + +## Как попасть на курс + +💳 Сейчас на курс можно записаться по годовой подписке на план «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 + +🎉 После того, как Вы взяли курс, в течении суток я добавляю вам права на репозиторий в Github, добавляю в календарь на созвоны через google-meet, и придут ссылки на все нужные ресурсы в почту. Может попасть в спам, проверьте. + +👉 Новости курса будут в канале: https://t.me/asyncify +👉 Открытая группа курса: https://t.me/asynctalks +👉 Подписывайтесь на https://t.me/metarhia и https://www.youtube.com/@TimurShemsedinov чтобы следить за новостями 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 чтобы следить за новостями diff --git a/Courses/Async.uk.md b/Courses/Async.uk.md new file mode 100644 index 0000000..8d723f3 --- /dev/null +++ b/Courses/Async.uk.md @@ -0,0 +1,70 @@ +# Асинхронне програмування + +- Автор: https://github.com/tshemsedinov +- Умовні позначення: + - ✨ - Обов'язкові лекції + - 🧑‍💻 - Приклади коду + - 🧩 - Необов'язкові лекції + - 🕑 - Застарілі лекції (не актуальні чи історічні) + +## Програма курсу + +- ⭐ [Вступ та організаційні питання](https://youtu.be/vfEyRijm83g) +- ⭐ [Q&A семінар для усіх курсів](https://youtu.be/Wm7wclbv1Ik) +- ✨ [Асинхронне програмування (огляд)](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 +- ⭐ Буде нова лекція: AbortController та AbortSygnal - Скасування асинхронних операцій +- 🧩 [Асинхронна композиція функцій](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) diff --git a/Courses/Asynchronous-timecodes.md b/Courses/Asynchronous-timecodes.md new file mode 100644 index 0000000..872a11a --- /dev/null +++ b/Courses/Asynchronous-timecodes.md @@ -0,0 +1,122 @@ +# Таймкоды к курсу "Асинхронное программирование" + +Общее оглавление курса тут: [Asynchronous.md](Asynchronous.md) + +## [Асинхронное программирование в Node.js и JavaScript](https://youtu.be/hY6Z6qNYzmc) + +- [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) + +- [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) + +- [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) + +- [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) + +## [Асинхронность на промисах, 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 a069c59..0163388 100644 --- a/Courses/Asynchronous.md +++ b/Courses/Asynchronous.md @@ -1,6 +1,8 @@ # Асинхронное программирование -Объем материала: 24 лекции, 27 репозиториев с примерами кода. +Объем материала: 26 лекции, 28 репозиториев с примерами кода. + +[Для части лекций есть таймкоды и подробное оглавление](Asynchronous-timecodes.md) ## Видео-лекции @@ -19,7 +21,7 @@ - Библиотека async.js: https://caolan.github.io/async/ - [Асинхронность на промисах](https://youtu.be/RMl4r6s1Y8M) - Примеры кода: https://github.com/HowProgrammingWorks/Promise -- [Асинхронные функции и обработка ошибок](https://youtu.be/Jdf_tZuJbHI) +- [Асинхронные функции, 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 @@ -34,8 +36,8 @@ - Генераторы: https://github.com/HowProgrammingWorks/Generator - Асинхронные генераторы: https://github.com/HowProgrammingWorks/AsyncGenerator - [Итераторы и асинхронные итераторы](https://youtu.be/rBGFlWpVpGs) - - Итераторы: https://github.com/HowProgrammingWorks/AsyncIterator - - Асинхронные итераторы: https://github.com/HowProgrammingWorks/Iterator + - Итераторы: https://github.com/HowProgrammingWorks/Iterator + - Асинхронные итераторы: https://github.com/HowProgrammingWorks/AsyncIterator - [Отмена асинхронных операций](https://youtu.be/T8fXlnqI4Ws) - Примеры кода: https://github.com/HowProgrammingWorks/Cancelable - [Асинхронная композиция функций](https://youtu.be/3ZCrMlMpOrM) @@ -59,3 +61,5 @@ - Асинхронные обработчики событий и AsyncEmitter - 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) diff --git a/Courses/Beginners.md b/Courses/Beginners.md new file mode 100644 index 0000000..44eba8c --- /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 с нашими настройками (см. в корне репозитория [NodejsStarterKit](https://github.com/HowProgrammingWorks/NodejsStarterKit)) + - Предпочтительно использовать `for..of`, реже `Array/map`, реже `for` по переменной, избегайте `for..in` и `forEach` + - Используйте промежуточные идентификаторы разделяя длинные выражения + - Предпочитайте `const`, реже используйте `let`, но никогда не используйте `var` + - Преобразуйте все магические значения в константы + - Придерживайтесь правил именования идентификаторов + - Хорошо подумайте над именами идентификаторов, чтобы при прочтении кода всем было понятно их содержимое + - Не делайте слишком длинных функций + - Не делайте большую стопку if-выражений, вместо этого используйте массивы и объекты + - Важно не переписать с нуля, а именно пошагово улучшать + +👉 Индекс других курсов: https://github.com/HowProgrammingWorks/Index diff --git a/Courses/Functional-timecodes.md b/Courses/Functional-timecodes.md new file mode 100644 index 0000000..43bbca6 --- /dev/null +++ b/Courses/Functional-timecodes.md @@ -0,0 +1,169 @@ +# Таймкоды к курсу "Функциональное программирование" + +Общее оглавление курса тут: 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/Fundamentals-2021-2022.md b/Courses/Fundamentals-2021-2022.md new file mode 100644 index 0000000..3051365 --- /dev/null +++ b/Courses/Fundamentals-2021-2022.md @@ -0,0 +1,270 @@ +# Основы программирования 2021-2022 + +Модули [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 неделя: 6 сентября - 12 сентября + +- [Введение в программирование](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 неделя: 13 сентября - 19 сентября + +- [Базовый синтаксис 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 неделя: 20 сентября - 26 сентября + +- [Функции, лямбды, контексты, замыкания в 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 неделя: 27 сентября - 3 октября + +- [Частичное применение и каррирование в 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 неделя: 4 октября - 10 октября + +- [История развития языков программирования](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 неделя: 11 октября - 17 октября + +- [Антипаттерны общие для всех парадигм](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 неделя: 18 октября - 24 октября + +- [Чеининг функций и объектов, обработка ошибок в 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 неделя: 25 октября - 31 октября + +- [Итерирование, циклы и итераторы в 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 неделя: 1 ноября - 7 ноября + +- Семинар: [Ответы на вопросы по курсу "Основы программирования"](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 неделя: 8 ноября - 14 ноября + +- [Массивы в 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 неделя: 15 ноября - 21 ноября + +- [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 неделя: 22 ноября - 28 ноября + +- [Сериализация и десериализация в 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 неделя: 29 ноября - 5 декабря + +- [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 неделя: 6 декабря - 12 декабря + +- [Композиция: 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 неделя: 13 декабря - 19 декабря + +- [Прототипное программирование и прототипное наследование](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 неделя: 20 декабря - 26 декабря + +- [Фабрики и пулы объектов в 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 неделя: 27 декабря - 31 декабря + +- [Типизированные массивы в 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 неделя: 31 января - 6 февраля + +- [Объектно-ориентированное программирование](https://youtu.be/r4ReQlVtfgQ) +- [Структуры (struct) или записи (record)](https://youtu.be/Wb7o_kK4aH4) +- [Карта специальности инженер-программист](https://youtu.be/SE5aXH-yf0I) + +### 19 неделя: 7 февраля - 13 февраля + +- [Подход к изучению программирования](https://youtu.be/zMU4ir10DMg) +- Списки: односвязные, двусвязные, циклические, развернутые +- [Графы и запросы к графовым структурам данных](https://youtu.be/a0W0T8Yqw3s) + - Примеры кода: https://github.com/HowProgrammingWorks/Graph + +### 20 неделя: 14 февраля - 20 февраля + +- [Проекции и отображения наборов данных в JavaScript](https://youtu.be/lwJCq9inky8) + - Примеры кода: https://github.com/HowProgrammingWorks/Projection +- [Мономорфный и полиморфный код, инлайн-кэш, скрытые классы](https://youtu.be/9JUY3prnCQ4) + - Примеры кода: https://github.com/HowProgrammingWorks/Monomorphism + +### 21 неделя: 21 февраля - 27 февраля + +- [Функциональное программирование](https://youtu.be/0JxSs_GcvbQ) + - Смотрите обзорно, это не обязательная лекция, попробуйте уловить суть парадигмы + - Примеры кода: https://github.com/HowProgrammingWorks/FunctionalProgramming +- [Реактивное программирование](https://youtu.be/7MH8-qQc-48) + - Примеры кода: https://github.com/HowProgrammingWorks/ReactiveProgramming + +### 22 неделя: 28 февраля - 6 марта + +- [Работа с файлами, буферами и файловыми потоками в 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 неделя: 7 марта - 13 марта + +- [Асинхронное программирование на 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 неделя: 14 марта - 20 марта + +- Неизменяемые структуры данных (immutable) +- Автоматное программирование: конечные автоматы (машины состояний) + +### 25 неделя: 21 марта - 27 марта + +- [Антипаттерны объектно-ориентированного программирования](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 неделя: 28 марта - 3 апреля + +- [Генераторы и асинхронные генераторы](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 неделя: 4 апреля - 10 апреля + +- [Перечислимый тип (enum) в JavaScript и TypeScript](https://youtu.be/BXiKebOIAGI) + - Примеры кода: https://github.com/HowProgrammingWorks/Enum +- [Дженерики и обобщенное программирование](https://youtu.be/r6W2z3DQhoI) + - Примеры кода: https://github.com/HowProgrammingWorks/Generics + +### 28 неделя: 11 апреля - 17 апреля + +- [Тестирование: юниттесты с примерами](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 неделя: 18 апреля - 24 апреля + +- [Интроспекция и рефлексия в JavaScript](https://youtu.be/yvW1PjUVeM0) + - Интроспекция: https://github.com/HowProgrammingWorks/Introspection + - Рефлекция: https://github.com/HowProgrammingWorks/Reflect +- [Почему хорошее ИТ-образование невостребовано рыночком](https://youtu.be/nvIJE6xMpiI) diff --git a/Courses/Fundamentals-2022-2023.md b/Courses/Fundamentals-2022-2023.md new file mode 100644 index 0000000..cef5454 --- /dev/null +++ b/Courses/Fundamentals-2022-2023.md @@ -0,0 +1,255 @@ +# Основы программирования 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 неделя: 03 - 09 октября + +- [Введение в программирование](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 неделя: 10-16 октября + +- [Базовый синтаксис 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 неделя: 17-23 октября + +- [Функции, стрелочные функции, контексты, замыкания в 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 неделя: 24-30 октября + +- [Частичное применение и каррирование в 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 неделя: 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 +- [Антипаттерны общие для всех парадигм](https://youtu.be/NMUsUiFokr4) + - Примеры кода: https://github.com/HowProgrammingWorks/Antipatterns/tree/master/JavaScript/01-Common + +### 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 +- [Итерирование, циклы и итераторы в 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) + +### 7 неделя: 14-20 ноября + +- [Таймеры, таймауты и 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) +- [Массивы в 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 + +### 8 неделя: 21-27 ноября + +- [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 +- [Сериализация и десериализация в JavaScript и Node.js](https://youtu.be/GtKPniOEzh8) + - Примеры кода: https://github.com/HowProgrammingWorks/Serialization + +### 9 неделя: 28 ноября - 04 декабря + +- [Рефакторинг: причины, цели, техники и процесс](https://youtu.be/z73wmpdweQ4) + - Примеры кода: https://github.com/HowProgrammingWorks/Refactoring + - Пример проекта: https://github.com/tshemsedinov/node-mysql-utilities +- Семинар: [Выбор направления в программировании](https://youtu.be/1gL627DQF4A) +- [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 + +### 10 неделя: 05-11 декабря + +- [Композиция: 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 +- [Мемоизация: memoize](https://youtu.be/H6S8QJo2Qxg) + - Примеры кода: https://github.com/HowProgrammingWorks/Memoization + - Старая версия лекции: https://youtu.be/2h9syXN5wO0 + +### 11 неделя: 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 +- [Функции-обертки: wrappers](https://youtu.be/En7pWi2fSzs) + - Примеры кода: https://github.com/HowProgrammingWorks/Wrapper + - Старая версия лекции: https://youtu.be/2h9syXN5wO0 + +### 12 неделя: 19-25 декабря + +- [Типизированные массивы в 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 + +### 13 неделя + +- [Объектно-ориентированное программирование](https://youtu.be/r4ReQlVtfgQ) +- [Структуры (struct) или записи (record)](https://youtu.be/Wb7o_kK4aH4) +- [Карта специальности инженер-программист](https://youtu.be/SE5aXH-yf0I) + +### 14 неделя + +- [Подход к изучению программирования](https://youtu.be/zMU4ir10DMg) +- Списки: односвязные, двусвязные, циклические, развернутые +- [Графы и запросы к графовым структурам данных](https://youtu.be/a0W0T8Yqw3s) + - Примеры кода: https://github.com/HowProgrammingWorks/Graph + +### 15 неделя + +- [Проекции и отображения наборов данных в JavaScript](https://youtu.be/lwJCq9inky8) + - Примеры кода: https://github.com/HowProgrammingWorks/Projection +- [Мономорфный и полиморфный код, инлайн-кэш, скрытые классы](https://youtu.be/9JUY3prnCQ4) + - Примеры кода: https://github.com/HowProgrammingWorks/Monomorphism + +### 16 неделя + +- [Функциональное программирование](https://youtu.be/0JxSs_GcvbQ) + - Смотрите обзорно, это не обязательная лекция, попробуйте уловить суть парадигмы + - Примеры кода: https://github.com/HowProgrammingWorks/FunctionalProgramming +- [Реактивное программирование](https://youtu.be/7MH8-qQc-48) + - Примеры кода: https://github.com/HowProgrammingWorks/ReactiveProgramming + +### 17 неделя + +- [Работа с файлами, буферами и файловыми потоками в 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 + +### 18 неделя + +- [Асинхронное программирование на 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 + +### 19 неделя + +- Неизменяемые структуры данных (immutable) +- Автоматное программирование: конечные автоматы (машины состояний) + +### 20 неделя + +- [Антипаттерны объектно-ориентированного программирования](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 + +### 21 неделя + +- [Генераторы и асинхронные генераторы](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 + +### 22 неделя + +- [Перечислимый тип (enum) в JavaScript и TypeScript](https://youtu.be/BXiKebOIAGI) + - Примеры кода: https://github.com/HowProgrammingWorks/Enum +- [Дженерики и обобщенное программирование](https://youtu.be/r6W2z3DQhoI) + - Примеры кода: https://github.com/HowProgrammingWorks/Generics + +### 23 неделя + +- [Тестирование: юниттесты с примерами](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 + +### 24 неделя + +- [Интроспекция и рефлексия в JavaScript](https://youtu.be/yvW1PjUVeM0) + - Интроспекция: https://github.com/HowProgrammingWorks/Introspection + - Рефлекция: https://github.com/HowProgrammingWorks/Reflect +- [Почему хорошее ИТ-образование невостребовано рыночком](https://youtu.be/nvIJE6xMpiI) diff --git a/Courses/Fundamentals-2023.md b/Courses/Fundamentals-2023.md new file mode 100644 index 0000000..01cb8ef --- /dev/null +++ b/Courses/Fundamentals-2023.md @@ -0,0 +1,137 @@ +# Основи програмування + +- Автор: https://github.com/tshemsedinov +- Завдання з курсу: https://github.com/HowProgrammingWorks/Index/blob/master/Practice/SEF1.ru.md +- Словник термінів: https://github.com/HowProgrammingWorks/Dictionary +- Умовні позначення: + - ⭐ - Нові спрощені лекції + - ✨ - Старі але важливі лекції + - 🧑‍💻 - Приклади коду + - 🧩 - Необов'язкові лекції + +## Перший семестр + +- Введення та огляд метеріалу + - ⭐ [Новий вступ](https://youtu.be/1lU7G46S4FA) + - ⭐ [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 diff --git a/Courses/Fundamentals-2024.md b/Courses/Fundamentals-2024.md new file mode 100644 index 0000000..92262f4 --- /dev/null +++ b/Courses/Fundamentals-2024.md @@ -0,0 +1,158 @@ +# Основи програмування + +- Автор: https://github.com/tshemsedinov +- [Практичні завдання](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Fundamentals-2024.md#практичні-завдання) +- Словник термінів: готується для публікації +- Умовні позначення: + - ⭐ - Нові спрощені лекції + - ✨ - Старі але важливі лекції + - 🧑‍💻 - Приклади коду + - 🧩 - Необов'язкові лекції + +## Перший семестр + +- Введення та огляд метеріалу + - ⭐ Новий вступ курсу 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) + - 🧑‍💻 [Практичні завдання](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) diff --git a/Courses/Fundamentals-timecodes.md b/Courses/Fundamentals-timecodes.md new file mode 100644 index 0000000..445f444 --- /dev/null +++ b/Courses/Fundamentals-timecodes.md @@ -0,0 +1,1076 @@ +# Таймкоды к курсу "Основы программирования" + +Общее оглавление курса тут: [Fundamentals.md](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 операция](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) +- [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://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) +- [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://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) +- [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 - теор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) + +- [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) + +- [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) + +- [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) + +- [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) + +- [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](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](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](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) +- [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://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) + +## [Массивы, объекты, классы, прототипы в 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 утиная](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) + +- [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](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) +- [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 0c4dc8e..a929ff6 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 @@ -40,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) @@ -80,7 +82,7 @@ - Семинар: [Выполнение лабораторных работ по курсу](https://youtu.be/ikUOyFPzdJw) - [Массивы в JavaScript: методы Array](https://youtu.be/D1kfYBkX9FE) - Примеры кода: https://github.com/HowProgrammingWorks/Arrays -- [Коллекции, множества, хештаблицы в JavaScript](https://youtu.be/hN0wsq5LNOc) +- [Коллекции, множества, хеш таблицы в JavaScript](https://youtu.be/hN0wsq5LNOc) - Коллекции: https://github.com/HowProgrammingWorks/Collections - Хеш таблицы: https://github.com/HowProgrammingWorks/Map - Множества: https://github.com/HowProgrammingWorks/Set @@ -103,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) @@ -144,19 +146,21 @@ - Примеры кода: https://github.com/HowProgrammingWorks/FunctionalProgramming - [Реактивное программирование](https://youtu.be/7MH8-qQc-48) - Примеры кода: https://github.com/HowProgrammingWorks/ReactiveProgramming -- Работа с файлами - Оценка сложности алгоритмов - [Измерение производительности кода и оптимизация](https://youtu.be/sanq2X7Re8o) - Примеры кода: https://github.com/HowProgrammingWorks/Benchmark - [Асинхронное программирование на callback`ах](https://youtu.be/z8Hg6zgi3yQ) - Примеры кода: https://github.com/HowProgrammingWorks/AsynchronousProgramming -- [Асинхронные функции async, await, thenable, обработка ошибок](https://youtu.be/Jdf_tZuJbHI) +- [Асинхронное программирование на promise`ах](https://youtu.be/RMl4r6s1Y8M) + - Примеры кода: https://github.com/HowProgrammingWorks/Promise +- [Асинхронные функции, async/await, thenable, обработка ошибок](https://youtu.be/Jdf_tZuJbHI) - Примеры кода: 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 @@ -164,8 +168,8 @@ - Генераторы: https://github.com/HowProgrammingWorks/Generator - Асинхронные генераторы: https://github.com/HowProgrammingWorks/AsyncGenerator - [Итераторы и асинхронные итераторы](https://youtu.be/rBGFlWpVpGs) - - Итераторы: https://github.com/HowProgrammingWorks/AsyncIterator - - Асинхронные итераторы: https://github.com/HowProgrammingWorks/Iterator + - Итераторы: https://github.com/HowProgrammingWorks/Iterator + - Асинхронные итераторы: https://github.com/HowProgrammingWorks/AsyncIterator - [Перечислимый тип (enum) в JavaScript и TypeScript](https://youtu.be/BXiKebOIAGI) - Примеры кода: https://github.com/HowProgrammingWorks/Enum - [Дженерики и обобщенное программирование](https://youtu.be/r6W2z3DQhoI) @@ -174,8 +178,9 @@ - Тестирование: 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 + - Reflect API: https://github.com/HowProgrammingWorks/Reflect + - Рефлексия: https://github.com/HowProgrammingWorks/Reflection - [Почему хорошее ИТ-образование невостребовано рыночком](https://youtu.be/nvIJE6xMpiI) diff --git a/Courses/GRASP.md b/Courses/GRASP.md new file mode 100644 index 0000000..b7f63ed --- /dev/null +++ b/Courses/GRASP.md @@ -0,0 +1,11 @@ +# GRASP: принципы распределения ответственности + +- [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/Metarhia-Club.md b/Courses/Metarhia-Club.md new file mode 100644 index 0000000..c25f1a5 --- /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 specialists) + +[💳 Buy annual membership](https://www.paypal.com/ncp/payment/YUJ56VENW6LJG) diff --git a/Courses/Metarhia.md b/Courses/Metarhia.md new file mode 100644 index 0000000..663be26 --- /dev/null +++ b/Courses/Metarhia.md @@ -0,0 +1,45 @@ +# Технологический стек Metarhia + +# Презентации + +- [Для владельцев и руководителей проектов](https://youtu.be/dEqJj8M0ke0) +- Для архитекторов и руководителей групп разработки +- [Node.js in 2021: новости платформы и вызовы на следующее десятилетие](https://youtu.be/nnB7ADYso8s) + - Слайды: https://www2.slideshare.net/tshemsedinov/nodejs-in-2021 + - Семинар с ответами на вопросы и обсуждением: https://youtu.be/zYRDhxj0zhQ +- Metarhia Roadmap 2021 + +## Для разработчиков + +- Структура приложений +- Конфигурирование сервера приложений +- Подключение зависимостей +- Вертикальное масштабирование на базе потоков +- Авторелоад кода +- Роутинг запросов, http и websocket, пример web hooks +- [Разработка API на Node.js и технологическом стеке Metarhia](https://youtu.be/gppFXK1YzPA) + - Семинар с ответами на вопросы и обсуждением: https://youtu.be/R7TwKnImNiY +- [Сессии и контексты на Node.js и технологическом стеке Metarhia](https://youtu.be/5u8imY9SJiQ) +- Работа с базами данных Postgres и Redis +- Обработка и логирование ошибок +- Аутентификация OAuth 2.0 +- Передача файлов по metacom: upload, download +- Валидация и проверка типов: API контракты +- Валидация в браузере: формы +- Планировщик задач в impress +- Модель предметной области и схемы баз данных +- Миграции и версионирование схем +- Тестирование юнит, системное, интеграционное +- Асинхронные очереди +- Очереди с надежным хранением +- Непрерывное развертывание +- Горизонтальное масштабирование + +## Вебинары Node.js: Выйди и зайди нормально + +- [Часть 1: Обзор новых возможностей, история и изоляция](https://youtu.be/GJY2dyE6328?t=480) + - Слайды: https://www.slideshare.net/tshemsedinov/nodejs-in-2020-part-1 +- [Часть 2: Проблемы и как они связаны с фундаментальными CS](https://youtu.be/r1u-dGocm1c) + - Слайды: https://www.slideshare.net/tshemsedinov/nodejs-in-2020-part-2 +- [Часть 3: Структура и архитектура проекта, Node.js Starter Kit](https://youtu.be/ZXB5OTRld1w) + - Слайды: https://www.slideshare.net/tshemsedinov/nodejs-in-2020-part-3 diff --git a/Courses/NodeJS-2022-2023.md b/Courses/NodeJS-2022-2023.md new file mode 100644 index 0000000..132f756 --- /dev/null +++ b/Courses/NodeJS-2022-2023.md @@ -0,0 +1,60 @@ +# Технологический стек Node.js 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) + +Чем это курс не является: это не чтение документации, не курс по фреймворкам, не курс по Metarhia, не повторение старого курса, не лайвкодинг и не мастеркласс, не стрим. Новый курс - это максимально сконцентрированная информация и практические задачи по разработке на чистой ноде но с хорошей архитектурой и использованием всех современных возможностей Node.js + +👉 Patreon: Подписаться: https://www.patreon.com/tshemsedinov +👉 Видео обзор курса: https://youtu.be/UGGzSEfCjPU + +## Содержание + +- 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ии и скаффолдинга + +# Доступ + +План «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) diff --git a/Courses/NodeJS-2024.md b/Courses/NodeJS-2024.md new file mode 100644 index 0000000..56f0b31 --- /dev/null +++ b/Courses/NodeJS-2024.md @@ -0,0 +1,162 @@ +# Технологический стек Node.js в 2024 + +Объем материала: 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 или редактор + +Ссылки на старый курс: +- 🔗 [Структура со ссылками на видео и репозитории с примерами кода](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 + +План курса формируется. Тут появится еще много тем в ближайшее время. + +## Задания + +- 🧑‍💻 Блок заданий №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`, и т.д.) + +# Доступ + +💳 Сейчас на курс можно записаться по плану «NodeJS 2024» годовая подписка на Patreon - полный курс. Матераиалы курса остаются и после завершения подписки (не нужно ее продлять все время, я не забираю доступ). +💳 Второй вариант: вместе с курсом по ассинхронному программированию «Node + Async» годовая подписка на Patreon. Программа курса «Async 2024»: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Async-2024.md + +🎫 Регистрация: https://www.patreon.com/tshemsedinov + +🎉 После того, как Вы взяли курс, в течении суток я добавляю вам права на репозиторий в Github, добавляю в календарь на созвоны через google-meet, и придут ссылки на все нужные ресурсы в почту. Может попаст в спам, проверьте. + +👉 Подписывайтесь на https://t.me/metarhia и https://www.youtube.com/@TimurShemsedinov чтобы следить за новостями. 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 чтобы следить за новостями. diff --git a/Courses/NodeJS-timecodes.md b/Courses/NodeJS-timecodes.md new file mode 100644 index 0000000..1b1c1d7 --- /dev/null +++ b/Courses/NodeJS-timecodes.md @@ -0,0 +1,272 @@ +# Таймкоды к курсу по Node.js + +Общее оглавление курса тут: [NodeJS.md](NodeJS.md) + +## [Node.js Введение в технологию](https://youtu.be/WBcHgaoHh1k) + +- [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) + +- [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) + +- [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) + +- [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) + +- [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) + +- [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) + +- [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) + +## [Модули, слои, структура проекта, песочницы в JavaScript и Node.js](https://youtu.be/O7A9chb573E) + +- [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) + +## [Межпроцессовое взаимодействие в Node.js](https://youtu.be/2OXWZFMvfbc) + +## [Слои, связанность и связность кода в JavaScript](https://youtu.be/A3RpwNlVeyY) + +## [Клиент-сервер на Node.js TCP и UDP, DNS](https://youtu.be/bHn-wTlTTR0) + +- [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) + +## [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) +- [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) + +## [Необработанные ошибки в промисах на 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) + +- [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) + +## [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) + +- [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) + +- [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) + +## [Контрактное программирование с примерами на 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 5571b28..6c742a9 100644 --- a/Courses/NodeJS.md +++ b/Courses/NodeJS.md @@ -1,9 +1,19 @@ # Технологический стек Node.js -Объем материала: 38 лекций, 37 репозиториев с примерами кода, 4 PDF со слайдами. +Объем материала: 48 лекций + 9 докладов и вебинаров, 37 репозиториев с примерами кода, 4 PDF со слайдами. Перед основной частью курса по Node.js нужно сначала освоить хоть частично курс по асинхронному программированию: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md +- [Для части лекций есть таймкоды и подробное оглавление](NodeJS-timecodes.md) +- [Новый курс Node.js 2023](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/NodeJS-2022-2023.md) + +## Доклады и выступления + +- [Node.js Middleware – никогда больше!](https://youtu.be/RS8x73z4csI) + - Слaйды: https://www2.slideshare.net/tshemsedinov/nodejs-middleware-never-again +- [Байки про JavaScript и Node.js с Тимуром Шемсединовым](https://youtu.be/hoKKYKMadQs) +- [Стратегия входа Node.js в корпоративный сектор](https://youtu.be/FLcBrP1KFYk) + ## Вебинары Node.js: Выйди и зайди нормально - [Часть 1: Обзор новых возможностей, история и изоляция](https://youtu.be/GJY2dyE6328?t=480) @@ -13,16 +23,23 @@ - [Часть 3: Структура и архитектура проекта, Node.js Starter Kit](https://youtu.be/ZXB5OTRld1w) - Слайды: https://www.slideshare.net/tshemsedinov/nodejs-in-2020-part-3 +## Вебинары Node.js for Enterprise + +- [Часть 1: DDD, слои транспорт-агностик подход](https://youtu.be/L7Yge5Ph0z4) +- [Часть 2: Изоляция кода и внедрение зависимостей](https://youtu.be/GRg4BmV1uYI) +- [Часть 3: Применение GRASP, SOLID, DDD, LoD, GoF](https://youtu.be/EiSbiQWt5tM) + ## Введение и основы -- [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 - [Node.js в 2019 году](https://youtu.be/CUU49jjHloM) - Слайды: 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) @@ -44,6 +61,10 @@ - Пример проекта: https://github.com/HowProgrammingWorks/Project - Абстрактные слои: https://github.com/HowProgrammingWorks/AbstractionLayers - Песочницы: https://github.com/HowProgrammingWorks/Sandboxes +- [Node.js модули: ECMA, Common.js, Module API](https://youtu.be/CJr2vS3hjMU) + - Примеры кода: https://github.com/HowProgrammingWorks/Modularity +- [Модули и пакеты, использование package.json и node_modules](https://youtu.be/31sX_3IbXs4) + - Примеры кода: https://github.com/HowProgrammingWorks/Packages - [Инверсия управления и внедрение зависимостей в Node.js](https://youtu.be/Fz86Fdjz-LM) - Инверсия управления: https://github.com/HowProgrammingWorks/InversionOfControl - Внедрение зависимостей: https://github.com/HowProgrammingWorks/DependencyInjection @@ -51,6 +72,7 @@ - Примеры кода: https://github.com/HowProgrammingWorks/InterProcessCommunication - [Слои, связанность и связность кода](https://youtu.be/A3RpwNlVeyY) - Примеры кода: https://github.com/HowProgrammingWorks/Abstractions +- [GRASP принципы](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/GRASP.md) ## Разработка серверов приложений и API на Node.js @@ -105,7 +127,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 @@ -124,3 +146,9 @@ - Слайды: https://www.slideshare.net/tshemsedinov/nodejs-security-199004963 - [Serverless Clouds (FaaS) и изоляция контекстов запросов в Node.js](https://youtu.be/x-Rd6fPV6L8) - Слайды: https://www.slideshare.net/tshemsedinov/serverless-clouds-faas-and-request-context-isolation-in-nodejs + +## Вспомогательные темы + +- [Асинхронный пул для worker thread pool в Node.js](https://youtu.be/Jj5KZRq4wYI) + +👉 [Новый курс Node.js 2023](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/NodeJS-2022-2023.md) diff --git a/Courses/OOP.md b/Courses/OOP.md index c503dba..ef6995a 100644 --- a/Courses/OOP.md +++ b/Courses/OOP.md @@ -2,19 +2,28 @@ - [Объектно-ориентированное программирование](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 - [Шаблоны проектирования](Patterns.md) -- [Ассоциация, агрегация и композиция объектов](https://www.youtube.com/watch?v=tOIcBrzezK0) +- [Ассоциация, агрегация и композиция объектов](https://youtu.be/tOIcBrzezK0) - Примеры кода: https://github.com/HowProgrammingWorks/Association - [Принцип единственной ответственности и закон Конвея](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 +- [GRASP принципы](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/GRASP.md) + - Принцип информационный эксперт / Information Expert + - Зацепление и связность / Coupling and Cohesion + - Чистая выдумка / Pure Fabrication + - Пример декомпозиции класса 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 960a420..40ba688 100644 --- a/Courses/Paradigms.md +++ b/Courses/Paradigms.md @@ -1,10 +1,19 @@ # Парадигмы программирования +[Таймкоды и подробное оглавление для части лекций](Paradigms-timecodes.md) + +## Видео-лекции + +- Процедурное программирование +- [Объектно-ориентированное программирование](https://youtu.be/r4ReQlVtfgQ) +- [Структуры (struct) или записи (record)](https://youtu.be/Wb7o_kK4aH4) +- [Дженерики и обобщенное программирование](https://youtu.be/r6W2z3DQhoI) + - Примеры кода: https://github.com/HowProgrammingWorks/Generics +- [Have Objects Failed? Или что не так с ООП?](https://youtu.be/4yO5OS0vPSw) - [Функциональное программирование на JavaScript](https://youtu.be/0JxSs_GcvbQ) - Примеры кода: https://github.com/HowProgrammingWorks/FunctionalProgramming - [Реактивное программирование на JavaScript](https://youtu.be/7MH8-qQc-48) - Примеры кода: https://github.com/HowProgrammingWorks/ReactiveProgramming - [Асинхронное программирование (обзор)](https://youtu.be/hY6Z6qNYzmc) -- [Have Objects Failed? Или что не так с ООП?](https://youtu.be/4yO5OS0vPSw) - [Модель акторов (Actor Model)](https://youtu.be/xp5MVKEqxY4) - Примеры кода: https://github.com/HowProgrammingWorks/ActorModel diff --git a/Courses/Patterns-2024-ru.md b/Courses/Patterns-2024-ru.md new file mode 100644 index 0000000..d670111 --- /dev/null +++ b/Courses/Patterns-2024-ru.md @@ -0,0 +1,143 @@ +# 🚀 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 и браузерных приложений. + +***🗓️ Следующий онбординг будет 1 октября 2024*** + +Понимание этих концепций нельзя просто извлечь из коробки (или книги) и поместить себе в голову. Такое понимание сильно различается для разных языков и платформ. +Слепой перенос знаний и практик из 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) + +## Тарифные планы + +* 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 + +Структура и модульность. Почему нужно переосмыслить и адаптировать 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) diff --git a/Courses/Patterns-2024-ua.md b/Courses/Patterns-2024-ua.md new file mode 100644 index 0000000..861af78 --- /dev/null +++ b/Courses/Patterns-2024-ua.md @@ -0,0 +1,143 @@ +# 🚀 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 та браузерних додатків. + +***🗓️ Наступний онбординг розпочнеться 1 жовтня 2024 року*** + +Розуміння цих концепцій не можна просто витягти з коробки (або книги) і помістити собі у голову. Таке розуміння сильно відрізняється для різних мов та платформ. +Сліпе перенесення знань і практик з 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) + +## Тарифні плани + +* 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 + +Структура та модульність. Чому потрібно переосмислити та адаптувати 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) diff --git a/Courses/Patterns-2024.md b/Courses/Patterns-2024.md new file mode 100644 index 0000000..e826c7a --- /dev/null +++ b/Courses/Patterns-2024.md @@ -0,0 +1,201 @@ +# 🚀 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. + +***🗓️ 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. + +## 💡 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 + +## 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 +- 💬 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 +- 🗺️ 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 + +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) +* 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) 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..0bf11e0 100644 --- a/Courses/Patterns.md +++ b/Courses/Patterns.md @@ -1,27 +1,98 @@ -# Шаблоны проектирования +# Patterns for JavaScript and Typescript -- [Шаблон 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 +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 + +## 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 diff --git a/Courses/Proposal-2023.md b/Courses/Proposal-2023.md new file mode 100644 index 0000000..e639c12 --- /dev/null +++ b/Courses/Proposal-2023.md @@ -0,0 +1,121 @@ +## Мультипарадигмене програмування + +1. Імперативний та декларативний підхід +2. Структуроване та неструктуроване програмування +3. Процедурне програмування +4. Функціональне програмування +5. Програмування на базі подій та реактивне програмування +6. Об'єктно-орієнтоване програмування +7. Прототипне програмування +8. Узагальнене програмування та дженеріки +9. Автоматне програмування, скінченні автомати (машини станів) +10. Модель акторів +11. Спеціалізовані мови для предметних областей (DSL) +12. Програмування на потоках даних +13. Метапрограмування +14. Динамічна інтерпретація метамоделей +15. Мультипарадигмене програмування та поєднання декількох парадигм +16. Контрактне прорамування +17. Компонентний підхід +18. Паралельне та асинхронне програмування + +## Веб програмування для бекенд та фронтенд + +1. Базові концепції, синтаксис та семантика мов JavaScript та TypeScript +2. Стан застосунку, структури даних та колекції +3. Підходи до роботи зі станом: stateful and stateless +4. Структури даних у JavaScript: стек, черга, дек, дерева та графи +5. Проекції та відображення наборів даних +6. Оцінка обчислювальної складності та оптимізація виконання у v8 +7. Що таке технологічний стек та огляд стеків для веб +8. Середовище розробки та налагодження коду +9. Ітерування: рекурсія, ітератори та генератори +10. Структура додатку: файли, модулі, компоненти, системи модульності +11. Об'єкт, прототип та клас +12. Часткове застосування та каррування, композиція функцій у JavaScript +13. Чейнінг для методів та функцій, домішки (mixins), мемоізація, фабрики +14. Залежності та бібліотеки, зачеплення та зв'язність коду +15. Антипатерни, ревью коду та рефакторинг +16. Угоди та стандарти, контракти +17. Тестування для бекенд та фронтенд +18. Події, таймери, лісенери +19. Регулярні вирази та BNF +20. Інтроспекція та рефлексія, серіалізація та десеріалізація + +## Асинхронне програмування + +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 структури даних + +## Архітектура програмних систем + +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 + +## Корпоративні інформаційні системи + +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) та ізоляція контекстів diff --git a/Courses/Roadmap-min.md b/Courses/Roadmap-min.md new file mode 100644 index 0000000..5fd067b --- /dev/null +++ b/Courses/Roadmap-min.md @@ -0,0 +1,19 @@ +# Roadmap + +![Roadmap](https://user-images.githubusercontent.com/4405297/192468178-5f77ce2c-b536-468c-aad0-16aabd3abd27.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) + diff --git a/Courses/Roadmap.md b/Courses/Roadmap.md new file mode 100644 index 0000000..245633e --- /dev/null +++ b/Courses/Roadmap.md @@ -0,0 +1,52 @@ +# Roadmap + +![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) +- [Углубленный JavaScript: старый курс](./Fundamentals.md) +- [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) +- [Таймкоды к курсу](./Asynchronous-timecodes.md) + +## OOP, GRASP, SOLID, 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) +- [Таймкоды к курсу](./NodeJS-timecodes.md) +- [Новый курс Node.js 2022-23](./NodeJS-2022-2023.md) + +## Architecture and Enterprise Information Systems + +- [Проектирование сетевых протоколов и сервисов](./Network.md) +- [Архитектура информационных систем](./Architecture.md) +- [Проектирование баз данных](./Databases.md) +- [Высоконагруженные и масштабируемые системы](./Highload.md) +- [Безопасность информационных систем](./Security.md) + +# Seminars, Interviews, Public talks + +- [Индекс докладов, интервью и других выступлений](./Talks.md) +- [Публичные собеседования](https://www.youtube.com/watch?v=tlBg-vwYpbs&list=PLHhi8ymDMrQZIC0Py5pekvdH49rkXH_MJ) +- Записи семинаров (скоро будет плейлист за все годы) diff --git a/Courses/Seminars.md b/Courses/Seminars.md new file mode 100644 index 0000000..967f411 --- /dev/null +++ b/Courses/Seminars.md @@ -0,0 +1,11 @@ +# Семинары: основы программирования, JavaScript и другие языки + +- [JavaScript семинар #1 по курсу HowProgrammingWorks](https://youtu.be/eYjf_WrYAqk) +- [JavaScript семинар #2 по курсу HowProgrammingWorks](https://youtu.be/05iTAT_t6cI) +- [JavaScript семинар #3 по курсу HowProgrammingWorks](https://youtu.be/CtwTMX6wZpY) +- [JavaScript семинар #8 по курсу HowProgrammingWorks](https://youtu.be/T7e9D4sAYWY) +- [💻 JavaScript семинар #10: рефакторинг и ревью кода](https://youtu.be/efb7sAOeMPQ) +- [💻 JavaScript семинар #11: рефакторинг и ревью кода](https://youtu.be/kLBR2dkebGk) +- [💻 JavaScript семинар #12: рефакторинг и ревью кода](https://youtu.be/s2gAKg9CtsI) +- [💻 Семинар #14: ревью проектов на JavaScript и Java](https://youtu.be/l-joOy1Y2SI) +- [💻 JavaScript семинар #15: ревью кода](https://youtu.be/XcFfpbkYxlg) diff --git a/Courses/Short.md b/Courses/Short.md index ee09821..7e051f2 100644 --- a/Courses/Short.md +++ b/Courses/Short.md @@ -68,6 +68,11 @@ и GoF: порождающие, структурные и поведенческие шаблоны, плюс контрактное программирование. +- GRASP принципы с адаптацией для JavaScript и Node.js +- Принцип информационный эксперт / Information Expert +- Зацепление и связность / coupling and cohesion +- Чистая выдумка / Pure Fabrication + ## Асинхронное программирование: 2 семестр 2 курса - Введение в асинхронное программирование и неблокирующий ввод-вывод 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) diff --git a/Courses/Talks.md b/Courses/Talks.md index e89bff3..7f11254 100644 --- a/Courses/Talks.md +++ b/Courses/Talks.md @@ -1,17 +1,214 @@ -# Доклады на конференциях +# 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) +- [🧩 Паттерны проектирования для 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) +- [🧩 Оптимизация структур данных и паттернов — V8, JavaScript, TypeScript](https://youtube.com/live/PncSzdGTzk0) + +## 2024 + +- [Паттерны в 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) +- [🎙️ 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) +- [🎙️ Lowcode/Nocode, AI in JavaScript — Dmytro Nechai — Дмитрий Нечай — Metarhia Community Meetup #182](https://youtu.be/tzZ316WTF2Q) +- [💡 Парадигмы и языки программирования, лингвистическая природа мышления инженера — Тимур Шемсединов, Сергей Одарыч](https://youtu.be/_i__fBmxCaY) + +## 2023 + +- [Стрим про образование программиста с Тимуром Шемсединовым и Сергеем Немчинским](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://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) +- [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) +- [Искусственный суперинтеллект уже изобретен? | Тимур Шемсединов, Владимир Бандура, Фельдман на Альфа](https://www.youtube.com/live/Z6mnu4ZqOco) + +## 2022 + +- [Интервью на 5 часов на канале ITBEARD](https://youtu.be/0xtEdIy2j88) +- Разрушаем мифы про Node.js - EPAM Math.random community + - Видео: https://youtu.be/Nykxhmh3WDY + - https://www.mathrandom.com/events/myth-busters-about-nodejs/ +- [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) +- [Укрінформ: Презентація METATECH](https://youtu.be/Oz8E0mbdDec) +- [Web Summit 2022: QOTEQ lowcode platform presentation](https://websummit.com/) + +## 2021 + +- [Digitaltalk с Valeriy Wise](https://youtu.be/410aVHlS6Gg) +- [Открытое собеседование на подлодке](https://youtu.be/sNFPdfgax3Q) https://podlodka.io/fecrew +- [Многопоточность в NodeJS](https://youtu.be/VNXga8zomrY) + - Слайды: https://www.slideshare.net/tshemsedinov/multithreading-in-nodejs-and-javascript +- [Интервью на "Мы обречены"](https://youtu.be/bPx4ajl0Tmw) +- [Node.js потоки для I/O-bound задач (Node.js threads for I/O-bound tasks)](https://fwdays.com/en/event/js-autumn-fwdays-2021/review/node-js-threads) + - Слайды: https://www.slideshare.net/tshemsedinov/nodejs-threads-for-iobound-tasks +- [OdessaJs: Node.js Online TechCorner Part 2](https://youtu.be/f5cCHvwUwAI) +- Node.js: Less complexity, more reliability at [HolyJS](https://holyjs-moscow.ru/) + - Слайды https://www.slideshare.net/tshemsedinov/nodejs-holyjs-2021 + - https://holyjs-moscow.ru/talks/node-js-less-complexity-more-reliability/ +- Rethinking Low-code (Fwdays Architecture '21) + - Слайды https://www.slideshare.net/tshemsedinov/rethinking-lowcode + - https://fwdays.com/en/event/architecture-fwdays-2021/review/rethinking-low-code +- [Байки про JavaScript и Node.js с Тимуром Шемсединовым](https://youtu.be/hoKKYKMadQs) +- [Стратегия входа Node.js в корпоративный сектор](https://youtu.be/FLcBrP1KFYk) +- [Как Node.js разработчику подготовиться к проектам корпоративного уровня](https://youtu.be/DghzF_OmodY) +- [Node.js for Enterprise Node.js от middleware к сервисам](https://fwdays.com/en/event/node-js-stack-for-enterprise) + - [Часть 1: DDD, слои транспорт-агностик подход](https://youtu.be/L7Yge5Ph0z4) + - [Часть 2: Изоляция кода и внедрение зависимостей](https://youtu.be/GRg4BmV1uYI) + - [Часть 3: Применение GRASP, SOLID, DDD, LoD, GoF](https://youtu.be/EiSbiQWt5tM) +- [Главная проблема ИТ индустрии](https://youtu.be/XOzjDBeaSwc) + - [Голосуйте за спикера на странице конкурса](https://techspeaker.allstars-it.com/#speakers) +- [Технологический стек Metarhia для Node.js](https://youtu.be/PHyl4b8Fj5A) + - Слайды: https://www.slideshare.net/tshemsedinov/fwdays-2021-metarhia-technology-stack-for-nodejs) + - Страница: https://fwdays.com/en/event/javascript-fwdays-2021/review/metarhia-technology-stack-for-nodejs +- [Node.js - плохие подходы и хорошие стороны - Postindustria Podcast](https://youtu.be/oEyS_TNiw2g) +- [Parrots who code: we will teach everyone](https://youtu.be/WG9Qv9DR-ps) + JavaScript Fwdays with Andrey Listochkin and Timur Shemsedinov) (17 Aug 2021) +- [NodeJS Online TechCorner at Odessa.js](https://youtu.be/yruIjTWYMro) with + Timur Shemsedinov, Eldar Djafarov, Denis Otrishko, Nick Romanenko, Nick + Lototskiy, Olexiy Novohatskiy (19 Aug 2021) +- [Как GRASP и SOLID защитят ваш Node.js код от мидлварей и протекания абстракций](https://youtu.be/p063fy3fHZM) +- [Hacktoberfest 2021: лайвкодинг и ревью кода, Node.js worker_threads и thread pool для Metarhia](https://youtu.be/qipIRQptP_4) +- [Дуэль Node.js vs Java: Тимур Шемсединов vs Владимир Кириченко](https://youtu.be/oIzLD73IQ4s) + +## 2020 - [JavaScript fwdays'20 autumn online conference](https://fwdays.com/en/event/javascript-fwdays-2020) - - Доклад: [Node.js Middleware: Never again! 2020 Sep 22, 19:30](https://fwdays.com/en/event/javascript-fwdays-2020/review/nodejs-middleware) - - Слайды: https://www.slideshare.net/tshemsedinov/nodejs-middleware-never-again - - Круглый стол: Node.js with Timur Shemsedinov, Illya Klymov, Olena Sharovar, Nikita Galkin and Andrii Shumada -- Вебинары на JavaScript fwdays'20 [Node.js: Выйди и зайди нормально]() + - Доклад: [Node.js Middleware: Never again!](https://youtu.be/RS8x73z4csI) + - Слайды: https://www.slideshare.net/tshemsedinov/nodejs-middleware-never-again +- Вебинары на JavaScript fwdays'20 [Node.js: Выйди и зайди нормально](https://fwdays.com/en/event/node-js-in-2020) - [Часть 1: Обзор новых возможностей, история и изоляция](https://youtu.be/GJY2dyE6328?t=480) - Слайды: https://www.slideshare.net/tshemsedinov/nodejs-in-2020-part-1 - [Часть 2: Проблемы и как они связаны с фундаментальными CS](https://youtu.be/r1u-dGocm1c) - Слайды: https://www.slideshare.net/tshemsedinov/nodejs-in-2020-part-2 - [Часть 3: Структура и архитектура проекта, Node.js Starter Kit](https://youtu.be/ZXB5OTRld1w) - Слайды: https://www.slideshare.net/tshemsedinov/nodejs-in-2020-part-3 +- JavaScript fwdays'20: [Web Locks API in Node.js and browser](https://youtu.be/auMM-uV12F0) + - Слайды: https://www.slideshare.net/tshemsedinov/web-locks-api +- Node.js global summit 2020 + - [Asynchronous programming and mutlithreading](https://www.slideshare.net/tshemsedinov/asynchronous-programming-and-mutlithreading) + - [Race conditions, web locks and shared memory](https://www.slideshare.net/tshemsedinov/raceconditionsweblocksandsharedmemory) + - [Node.js patterns and antipatterns](https://www.slideshare.net/tshemsedinov/patterns-and-antipatterns-234771061) +- Круглый стол: [Node.js with Timur Shemsedinov, Illya Klymov, Olena Sharovar, Nikita Galkin and Andrii Shumada](https://youtu.be/0DHslLRof-M) +- AllStarsIT meetup: Патерни та антипатерни для JavaScript та Node.js + - Event page: https://www.facebook.com/events/493244841602522 + - Video: https://youtu.be/udcn_NqvDqk +- Innovecs meetup: [Node.js in 2020](https://www.facebook.com/events/599254947289540/) +- DevPro workshop: [Node.js 8-часовой интенсив](https://www.facebook.com/events/469222250713698/) +- [Школа Метархии NS5: 11-12 июля](https://www.meetup.com/NodeUA/events/269049581/) +- [Школа Метархии NS6: 22-23 августа](https://www.meetup.com/NodeUA/events/272331406/) + +## 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 + +## 2018 + +- KharkivJS 2018 + - [Карта знаний инженера-программиста](https://youtu.be/_s2WkaZJ0xQ) + - Слайды: https://www.slideshare.net/tshemsedinov/timur-shemsedinov-kharkivjs-2018 +- KievJS + - [Метархия придет, порядок наведет](https://youtu.be/G3IWQP4gVSg) + - Слайды: https://www.slideshare.net/tshemsedinov/metarhia-kievjs-22feb2018 +- Как повышать свою квалификацию всю жизнь + - Слайды: https://www.slideshare.net/tshemsedinov/how-to-get-knowledge-and-improve-it-all-your-professional-life-long +- Node.js School at Odessa.js'2018 + - [Часть 1: Введение и парадигмы программирования](https://youtu.be/UHl_BPEfc_M) + - [Часть 2: Стиль, парадигмы, функции](https://youtu.be/HWOdjxUqVmY) + - [Часть 3: Частичное применение, каррирование, замыкания, чеининг](https://youtu.be/OBTYfpCRABA) + - [Часть 5: EventEmitter, Symbol, Proxy](https://youtu.be/UwhOIFJX4Ok) + - [Часть 6: Композиция функций](https://youtu.be/0ldgoRKoTuo) + - [Часть 7: Коллекции: Array, Object, Map, Set, weak & typed, итераторы](https://youtu.be/1CFCvFGk4fM) + - [Часть 8: Типизированные массивы, буферы, итераторы, генераторы](https://youtu.be/bFT7VGFfP7o) + - [Часть 9: Event loop, асинхронность, таймеры, колбеки, промисы, async/await](https://youtu.be/jUCJfLv48yc) + - [Часть 10: Наблюдение за файловой системой и динамическая подгрузка в Node.js](https://youtu.be/0EQQZvNM_uo) + - [Часть 11: Структуры данных: связные списки, деревья структур в JavaScript](https://youtu.be/XNliOCBhYRY) + - [Часть 12: Графы на JavaScript (структуры данных)](https://youtu.be/eD1A7V-Jzow) + - [Часть 13: Асинхронное программирование в JavaScript и Node.js](https://youtu.be/gHrw05mH7d8) + - [Часть 14: Коллекторы данных, композиция асинхронных функций в JavaScript и Node.js](https://youtu.be/q-75nBM365Y) + - [Часть 15: адаптеры callbackify, promisify, асинхронная очередь для Node.js и JavaScript](https://youtu.be/b0XwgMkDo14) + - [Часть 16: Обзор технологии Node.js от контрибьютеров и мемы про JavaScript](https://youtu.be/NTs-wc_Pk8M) + - [Часть 17: Потоки (Streams) в Node.js](https://youtu.be/3ZRkNvs_SaE) + - [Часть 18: HTTP сервер в Node.js, req, res, сокеты и потоки (streams)](https://youtu.be/PDR5hcV4a_0) + - [Часть 19: Песочницы (V8 sandbox) и исполнение JavaScript в Node.js](https://youtu.be/WnCwXvhscPM) + - [Часть 20: Процессы, кластеризация и балансировка в Node.js](https://youtu.be/YPoiltzkUXI) + +## 2017 + +- KharkivJS #8, 2017 + - [Асинхронное программирование на JS и Node.js](https://youtu.be/VdRhAXnfrd0) + - Слайды: https://www.slideshare.net/tshemsedinov/asynchronous-programming-with-java-script-and-nodejs +- JS Conference 2017 + - [Масштабирование Node.js для высоких нагрузок](https://youtu.be/-yJWLaJ31NI) + - Слайды: https://www.slideshare.net/tshemsedinov/nodejs-scaling-in-highload-145786324 + +## 2016 + +- Odessa.js'2016 + - [Node.js Macht frei](https://youtu.be/926UKzrVrqk) + - Статья: https://habrahabr.ru/post/306584/ + - Слайды: http://www.slideshare.net/tshemsedinov/metarhia-nodejs-macht-frei + +## 2015 + +- JS Lab 2015, Odessa + - [Архитектура информационных систем на Node.js](https://youtu.be/Try7lmWikao) + - Слайды: https://www.slideshare.net/tshemsedinov/nodejs-architecture +- Odessa.js 2015 + - [Как исправить ошибку в NodeJS и нечаянно поднять производительность в 2 раза](https://youtu.be/Q8ohKdYrpRA) + - Слайды: https://www.slideshare.net/tshemsedinov/metarhia-nodejs-macht-frei + +## 2014 + +- JavaScript fwdays'14 + - [Примеры быстрой разработки API на масштабируемом сервера приложений](https://youtu.be/f6McffaVq78) + - Слайды: https://www.slideshare.net/tshemsedinov/jsfwdays-2014impressen +- Odessa.js 2014 + - [Metaprogramming with JavaScript](https://www.slideshare.net/tshemsedinov/metaprogramming-with-javascript) +- [Node.js введение в технологию, КПИ](https://www.slideshare.net/tshemsedinov/nodejs-itmeetingkpi) + +## 2013 + +- FOSS Fea, 2013, Odessa + - [Impress Application Server for node.js](https://youtu.be/Zr_1YrcXtkE) + - Слайды: https://www.slideshare.net/tshemsedinov/impress-application-server-for-nodejs-28823747 diff --git a/Courses/Web.md b/Courses/Web.md index 4485bdc..45b0e53 100644 --- a/Courses/Web.md +++ b/Courses/Web.md @@ -11,12 +11,8 @@ - Примеры кода: https://github.com/HowProgrammingWorks/HttpRequest - [Разработка API на Node.js (клиент и сервер)](https://youtu.be/-az912XBCu8) - Примеры кода: https://github.com/HowProgrammingWorks/API -- [Отдача статики в Node.js](https://youtu.be/n_AdKIzbpBc) - - Примеры кода: https://github.com/HowProgrammingWorks/ServeStatic - [Progressive Web Applications PWA и ServiceWorkers](https://youtu.be/s7AIwZMTVPs) - Примеры кода: https://github.com/HowProgrammingWorks/ServiceWorker - [JavaScript в браузере: Web API (часть 1)](https://youtu.be/6O8SBJsNeNw) - [Отдача статики в Node.js](https://youtu.be/n_AdKIzbpBc) - Примеры кода и задачи: https://github.com/HowProgrammingWorks/ServeStatic -- [Progressive Web Applications PWA и ServiceWorkers](https://youtu.be/s7AIwZMTVPs) -- [JavaScript в браузере: Web API (часть 1)](https://youtu.be/6O8SBJsNeNw) 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', - }, -}); diff --git a/LICENSE b/LICENSE index c12d3d8..30ab0df 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2017-2020 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 diff --git a/Links.md b/Links.md index f60bb9a..ed018ca 100644 --- a/Links.md +++ b/Links.md @@ -15,6 +15,7 @@ тут публикуются объявления о лекциях, митапах и семинарах, все новые видео и другие материалы - Телеграм группа [MetarhiaHPW](https://t.me/MetarhiaHPW) +- Телеграм канал [Metaeducation](https://t.me/metaedu) - Подписка на митапы [HowProgrammingWorks](https://www.meetup.com/HowProgrammingWorks/) по общим темам программирования, по JavaScript и для начинающих, тут лежит календарь событий, можно регистрироваться и оставлять отзывы @@ -22,7 +23,7 @@ ## Для начинающих -- Телеграм группа [IP9X](https://t.me/Programming_IP9X) +- Телеграм группа для начинающих [IP9X](https://t.me/Programming_IP9X) - Подписка на митапы [HowProgrammingWorks](https://www.meetup.com/HowProgrammingWorks/) тут лежит календарь событий, можно регистрироваться и оставлять отзывы diff --git a/Practice/Index.md b/Practice/Index.md index 16e6f46..481ebd0 100644 --- a/Practice/Index.md +++ b/Practice/Index.md @@ -1,6 +1,6 @@ # Практика и проекты - Модуль [SEF1](SEF1.ru.md) (1 курс, 1 семестр) -- Модуль SEF2 (1 курс, 2 семестр) -- Модуль [SEF3](SEF3.ru.md) (2 курс, 1 семестр) -- Модуль SEF4 (2 курс, 2 семестр) +- Модуль [SEF2](SEF2.ru.md) (1 курс, 2 семестр) +- Модули [SEF3 и SEF4](SEF3-4.ru.md) (2 курс) +- Модули [SEF5 и SEF6](SEF5-6.ru.md) (3 курс) diff --git a/Practice/Projects.md b/Practice/Projects.md new file mode 100644 index 0000000..7f471eb --- /dev/null +++ b/Practice/Projects.md @@ -0,0 +1,25 @@ +# 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 + - 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 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-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 abstractions + - 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 diff --git a/Practice/SEF2.ru.md b/Practice/SEF2.ru.md new file mode 100644 index 0000000..4c0529f --- /dev/null +++ b/Practice/SEF2.ru.md @@ -0,0 +1,76 @@ +# Практика и проекты + +## Возможные варианты организации работ: + +- Контрибьюшен в любой open-source проект или библиотеку. +- Контрибьюшен в [Metarhia](https://github.com/metarhia). +- Проект студенческой группы или общественный проект в открытом коде. +- Собственный open-source проект. + +## Что разрешено и что запрещено: + +- Можно использовать любой язык и все встроенные в него библиотек. +- Нельзя использовать сторонние библиотеки, устанавливаемые из npm, GitHub и т.д. +- Репозиторий обязательно размещается на https://github.com в открытом доступе. +- Нужно развить навыки групповой работы, для этого студенты объединяются в группы +по 2-5 человек; группа может писать один общий проект или сделать перекрестный +ревью кода индивидуальных проектов каждого участника группы. Пересмотрите: + - [Что такое ревью кода](https://youtu.be/EKL6NiIQ6ZU) + - [Семинар: по ревью кода](https://youtu.be/AgH4OAKbmkM) +- Проект не может быть одномоментно залит на гитхаб за день до сдачи, его нужно +вести в гитхабе на протяжении нескольких месяцев, чтобы была видна работа, +история коммитов и PR (pull request). Хорошо, если можно будет проследить +улучшение кодовой базы, рефакторинг и оптимизацию. Пересмотрите: + - Общие [антипаттерны для всех парадигм](https://youtu.be/NMUsUiFokr4), и + - Антипаттерны [процедурного программирования](https://youtu.be/cTv7V22mkwE); + - Лекция про [рефакторинг](https://youtu.be/z73wmpdweQ4). +- Хорошее ведение репозитория: issues, pull requests, milestones (см. кнопки на +закладках issues и pr в github), discussions (не обязательно), kanban (средство +планирования проекта, ищите на закладке project в github), wiki (не обязательно). +- В каждом проекте должны быть юниттесты для проверки работоспособности. +- Репозиторий должен включать: + - Лицензию и список контрибьютеров + - Файл `README.md` с кратким (1-2 страницы) описанием проекта. Никакие папки + с бумагами не нужны, все только в электронном виде без бюрократии. + - Настроенный линтер (а если кода на JavaScript, еще и prettier). Пример проекта + с конфигурацией тут: https://github.com/HowProgrammingWorks/NodejsStarterKit + - Файл `package.json` в котором в разделе `scripts` есть команда `lint` + - Файлы `.eslintrc.json`, `.eslintignore` и `.prettierrc` + - Перед каждым коммитом запускайте из командной строки: `npm run lint` + (часть проблем автоматически исправляется, остальные - правим руками). + - Дотфайлы для системы контроля версий и менеджера пакетов. + +## Примеры тем: + +- Библиотека для работы с IPv4 и IPv6 адресами: парсер, сравнение, манипуляции, +работа с масками и диапазонами, сериализаци в виде строки и числа, любые другие +операции, которые вы придумаете. +- Парсер HTML, CSS, JSON, YAML или любого другого формата файлов. +- Разработать универсальный класс для кэширования: вычислений, операций +ввода/вывода, запросов к базе данных или других операций, требующих ускорения при +помощи кешировани (на выбор). Содержащий конфигурируемый кеш с такими +характеристиками: определенный размер в количестве записей или объеме памяти, +время вытеснения из кеша, приоритеты вытеснения. +- Реализовать машинную проверку правильности синтаксиса и стиля кода. Отдельная +тема может быть по исправлению простейших синтаксических ошибок. И еще одна тема +по автоформатированию кода, приведению его к соглашениям по стилю. +- Усовершенствованный EventEmitter, например, с такими возможностями: одноразовая +и N-разовая подписка, автоматическая отписка после таймаута или отправки +специального события, ожидание событий на синтаксисе async/await и др. +- Проекция структур данных в памяти. Можно сделать специальный синтаксис (язык +проекции), что уже сделано на JavaScript в репозитории +https://github.com/HowProgrammingWorks/Projection +- Разработать простую Key-value (ключ-значение) in-memory СУБД (систему +управления базами данных, которая хранит все в оперативной памяти). В самом +простом случае это хеш-таблица. Пример реализации Redis, Memcached или MongoDB, +можно взять их интерфейсы за основу и модифицировать. +- Разработать планировщик задач в виде класса или прототипа, который умеет +повторять выполнение метода по расписанию, например: по пятницам в 2 ночи или +каждый второй понедельник месяца в 12:30 по UTC. Он создает необходимые для этого +таймеры и исполняет задачи. +- Утилиты для интерфейса командной строки. + +## Регистрация тем + +- Нужно заполнить форму: https://forms.gle/u7v7nUFxamcgJ2aQ6 +- И дать мне права на репозиторий, мой аккаунт: https://github.com/tshemsedinov diff --git a/Practice/SEF3-4.ru.md b/Practice/SEF3-4.ru.md new file mode 100644 index 0000000..bac1473 --- /dev/null +++ b/Practice/SEF3-4.ru.md @@ -0,0 +1,67 @@ +# Практика и проекты + +## Возможные варианты: + +- Контрибьюшен в любой open-source проект или библиотеку +- Контрибьюшен в [Metarhia](https://github.com/metarhia) +- Проект студенческой группы или общественный проект в открытом коде +- Собственный open-source проект + +## Что разрешено и что запрещено: + +- Любой язык. +- Любой технологический стек. +- Можно использовать любые зависимости. +- Репозиторий обязательно размещается на https://github.com в открытом доступе. +- Желательно делать групповые работы, для этого студенты объединяются в группы +по 2-5 человек (могут быть внешние участники с других курсов, факультетов и +вообще не из КПИ); группа может писать один общий проект или сделать перекрестный +ревью кода индивидуальных проектов каждого участника группы. Пересмотрите: + - [Что такое ревью кода](https://youtu.be/EKL6NiIQ6ZU) + - [Семинар: по ревью кода](https://youtu.be/AgH4OAKbmkM) +- Проект не может быть одномоментно залит на гитхаб за день до сдачи, его нужно +вести в гитхабе на протяжении нескольких месяцев, чтобы была видна работа, +история коммитов и PR (pull request). Хорошо, если можно будет проследить +улучшение кодовой базы, рефакторинг и оптимизацию. Пересмотрите: + - Общие [антипаттерны для всех парадигм](https://youtu.be/NMUsUiFokr4), и + - Антипаттерны [процедурного программирования](https://youtu.be/cTv7V22mkwE); + - Лекция про [рефакторинг](https://youtu.be/z73wmpdweQ4). +- Хорошее ведение репозитория: issues, pull requests, milestones (см. кнопки на +закладках issues и pr в github), discussions (не обязательно), kanban (средство +планирования проекта, ищите на закладке project в github), wiki (не обязательно). + +## Если вы делаете свой репозиторий, то он обязательно должен включать: + +- Юниттесты (по желанию системные, интеграционные и нагрузочные тесты) +- CI (например: TravisCI, Github Actions) +- Лицензию и список контрибьютеров +- Хорошее ведение репозитория: issues, pull requests, (желательно milestones) +- Семантическое версионирование: https://semver.org/ + - Ведем CHANGELOG.md + - И выпускаем версии в виде тегов +- Настроенный линтер (для js еще и prettier) +- Дотфайлы для системы контроля версий и менеджера пакетов + +## Проекты, в которые можно конрибьютить: + +- Рекурсивное наблюдение за файловой системой: https://github.com/metarhia/metawatch +- Утилиты для интерфейса командной строки: https://github.com/metarhia/metacommand +- Хелпер (обертка) для node.js модуля vm: https://github.com/metarhia/metavm +- Query builder и миграции для Postgres: https://github.com/metarhia/metasql +- Сетевой протокол: https://github.com/metarhia/metacom +- Библиотека для логирования: https://github.com/metarhia/metalog +- Шаблонизатор: https://github.com/metarhia/tickplate +- Web-locks API (блокировки): https://github.com/metarhia/web-locks +- Библиотека для асинхронного программирования: https://github.com/metarhia/metasync +- Простые асинхронные абстракции: https://github.com/metarhia/do +- Буферизация для Writable Stream: https://github.com/metarhia/metastreams +- Библиотека для цветов в консоли: https://github.com/metarhia/concolor +- Загрузчик конфигурации: https://github.com/metarhia/config +- Фреймворк тестирования: https://github.com/metarhia/metatests +- Общие утилиты: https://github.com/metarhia/common +- Общие утилиты (облегченная): https://github.com/metarhia/metautil + +## Регистрация тем + +- Нужно заполнить форму: https://forms.gle/u7v7nUFxamcgJ2aQ6 +- И дать мне права на репозиторий, мой аккаунт: https://github.com/tshemsedinov diff --git a/Practice/SEF3.ru.md b/Practice/SEF5-6.ru.md similarity index 60% rename from Practice/SEF3.ru.md rename to Practice/SEF5-6.ru.md index 84377a7..a277c03 100644 --- a/Practice/SEF3.ru.md +++ b/Practice/SEF5-6.ru.md @@ -1,25 +1,37 @@ # Практика и проекты ## Возможные варианты: + - Контрибьюшен в любой open-source проект или библиотеку - Контрибьюшен в [Metarhia](https://github.com/metarhia) - Проект студенческой группы или общественный проект в открытом коде - Собственный open-source проект -## Разрешается (при зазумном обосновании выбора): -- Любой язык -- Любой технологический стек +## Что разрешено и что запрещено: + +- Любой язык. +- Любой технологический стек. +- Можно использовать любые зависимости. +- Репозиторий обязательно размещается на https://github.com в открытом доступе. +- Проект не может быть одномоментно залит на гитхаб за день до сдачи, его нужно +вести в гитхабе на протяжении нескольких месяцев, чтобы была видна работа, +история коммитов и PR (pull request). Хорошо, если можно будет проследить +улучшение кодовой базы, рефакторинг и оптимизацию. ## Если вы делаете свой репозиторий, то он обязательно должен включать: -- Юниттесты (возможно, системные и ганрузочные тесты) + +- Юниттесты, системные и интеграционные (по желанию нагрузочные тесты) - CI (например: TravisCI, Github Actions) - Лицензию и список контрибьютеров -- Хорошее ведение репозитория: issues, pull requests, milestones +- Хорошее ведение репозитория: issues, pull requests, (желательно milestones) - Семантическое версионирование: https://semver.org/ + - Ведем CHANGELOG.md + - И выпускаем версии в виде тегов - Настроенный линтер (для js еще и prettier) - Дотфайлы для системы контроля версий и менеджера пакетов ## Проекты, в которые можно конрибьютить: + - Рекурсивное наблюдение за файловой системой: https://github.com/metarhia/metawatch - Утилиты для интерфейса командной строки: https://github.com/metarhia/metacommand - Хелпер (обертка) для node.js модуля vm: https://github.com/metarhia/metavm @@ -29,10 +41,15 @@ - Шаблонизатор: https://github.com/metarhia/tickplate - Web-locks API (блокировки): https://github.com/metarhia/web-locks - Библиотека для асинхронного программирования: https://github.com/metarhia/metasync -- Простые асинхронные абстрации: https://github.com/metarhia/do +- Простые асинхронные абстракции: https://github.com/metarhia/do - Буферизация для Writable Stream: https://github.com/metarhia/metastreams - Библиотека для цветов в консоли: https://github.com/metarhia/concolor - Загрузчик конфигурации: https://github.com/metarhia/config -- Генерация документации из аннотации: https://github.com/metarhia/metadoc - Фреймворк тестирования: https://github.com/metarhia/metatests - Общие утилиты: https://github.com/metarhia/common +- Общие утилиты (облегченная): https://github.com/metarhia/metautil + +## Регистрация тем + +- Нужно заполнить форму: https://forms.gle/u7v7nUFxamcgJ2aQ6 +- И дать мне права на репозиторий, мой аккаунт: https://github.com/tshemsedinov diff --git a/README.md b/README.md index bad299c..ef59b00 100644 --- a/README.md +++ b/README.md @@ -1,57 +1,64 @@ # Индекс и состояние курсов +Книга по большей части материала (в разработке): https://github.com/HowProgrammingWorks/Book + - [Индекс каналов и групп сообщества Метархия](Links.md) -- [Индекс докладов на конференциях](Courses/Talks.md) +- [Индекс докладов, интервью и других выступлений](Courses/Talks.md) - [Индекс практических заданий](Practice/Index.md) +- [Индекс созвонов сообщества](Archive/WeeklyCall.md) -## Последовательная программа +## Базовый курс инженерии программного обеспечения -- [Введение и обзор знаний](Courses/Introduction.md) - (есть несколько видео-лекций) -- [Основы программирования, модули (1 год обучения)](Courses/Fundamentals.md) - (есть до 95% материала) +- [Введение и обзор знаний](Courses/Introduction.md) а так же [семинары](Courses/Seminars.md) +- [Основы программирования для начинающих](https://www.youtube.com/watch?v=2DM5I2CI4gY&list=PLpmhTzMVLuROAIey9vW3pyRSpHfknLssu) +- [Основы программирования, модули (1 год обучения)](Courses/Fundamentals.md) [(с таймкодами)](Courses/Fundamentals-timecodes.md) - [Программирование (2 год обучения)](Courses/Advanced.md) - (есть до 65% материала) -## Отдельные курсы +## Отдельные специализированные курсы - [Асинхронное программирование](Courses/Asynchronous.md) - (есть 97% примеров кода и видео-лекции) + (курс готов, регулярно обновляется) + [(с таймкодами)](Courses/Asynchronous-timecodes.md) - [Технологический стек Node.js](Courses/NodeJS.md) - (есть 95% кода и видео-лекций) + (курс готов, регулярно обновляется) + [(с таймкодами)](Courses/NodeJS-timecodes.md) +- [Технологический стек Metarhia](Courses/Metarhia.md) + (готовность 5%) - [Шаблоны проектирования](Courses/Patterns.md) - (есть 50% примеров кода и видео-лекций) + (готовность 50%) - [Парадигмы программирования](Courses/Paradigms.md) - (есть 50% кода и несколько видео-лекций) + (готовность 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) + (готовность 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%)