Курсы DOM — научитесь управлять HTML через JavaScript
DOM (Document Object Model) — это мост между HTML и JavaScript. Через DOM скрипт находит на странице кнопку, меняет текст в заголовке, отлавливает клик и перерисовывает интерфейс без перезагрузки. Без DOM любая интерактивность фронтенда — от модалок до бесконечной ленты — не работает.
Здесь собраны 25 онлайн-курсов, на которых учат работать с DOM в JavaScript: от коротких практикумов для верстальщиков, переходящих на JS, до больших фронтенд-программ с проектами и стажировкой. Сравнили цены (от 9 900 ₽ до 179 600 ₽, медиана 75 000 ₽), длительность, формат, рейтинг школ и реальные отзывы выпускников. Подобрали так, чтобы вы выбрали курс под свой уровень — нулевой, после вёрстки или после первого опыта в JS — и формат: спокойный самопросмотр или сопровождение с менторами и проверкой кода.
Что такое DOM и зачем он нужен
DOM расшифровывается как Document Object Model, объектная модель документа, программное представление HTML-страницы в виде дерева. Когда браузер загружает страницу, он не хранит HTML как просто текст. Он строит дерево, в котором каждый тег, каждая надпись и каждый комментарий — это объект со свойствами и методами. Через JavaScript мы получаем доступ к этому дереву и можем его читать и менять.
На практике это значит вот что. Кнопка на странице — обычный объект в дереве. У неё есть свойство textContent с её надписью, свойство style с цветом и размером, метод addEventListener, чтобы повесить обработчик клика. Меняешь свойство — браузер перерисовывает кнопку. Вешаешь обработчик — она оживает.
Без DOM JavaScript на сайте бесполезен. Любая динамика — выпадающее меню, валидация формы, лента ВКонтакте, корзина в интернет-магазине, предзагрузка картинок при скролле — работает через DOM. Поэтому навык входит в программу любого курса по фронтенду и часто идёт сразу после основ JavaScript.
Спецификация DOM ведётся WHATWG как живой стандарт, а первые версии модели стандартизировал ещё W3C в конце 90-х. Полная карта интерфейсов и методов — на странице DOM в документации MDN. Свежие правки и обсуждения изменений ведутся в актуальной спецификации WHATWG — туда заглядывают, когда нужно проверить нюанс поведения метода в браузере.
Как браузер строит DOM из HTML
Когда страница приходит на компьютер, браузер сначала разбирает HTML по символу — это парсинг. Каждый открывающий тег становится узлом-элементом, каждый кусок текста — текстовым узлом, каждый <!-- комментарий --> — узлом-комментарием. Так получается дерево с корнем в document.
В дереве 12 типов узлов, но в повседневной работе нужны три:
- Element — теги (
div,p,img). Это всё, на что вы будете воздействовать чаще всего. - Text — текст внутри тегов. Сюда же попадают пробелы и переносы строк, что иногда удивляет новичков при обходе дерева.
- Document — корневой узел всей страницы, точка входа во все методы поиска.
Браузер ещё умеет молча чинить кривой HTML. Если вы забыли закрыть тег или вставили <tr> мимо <tbody> — парсер сам добавит недостающие узлы. Это удобно для верстальщика, но иногда ломает ожидания скрипта: дерево в браузере не совпадает с тем, что вы написали в HTML. Поэтому при отладке полезно открывать инструменты разработчика и смотреть именно на «живое» дерево, а не на исходный код.
На главе про DOM-дерево в учебнике Ильи Кантора есть интерактивный пример — открываете и видите, как обычная страница выглядит изнутри.
Что вы научитесь делать на курсах по работе с DOM
Любая программа по DOM строится вокруг трёх задач: найти элемент, изменить его, отреагировать на событие. Расскажем, что именно входит в практику.
Поиск элементов. Это первая тема, без которой дальше идти некуда. Вы изучите document.getElementById для поиска по идентификатору, document.querySelector и querySelectorAll для поиска по любому CSS-селектору, getElementsByClassName и навигацию по дереву через parentNode, children, nextElementSibling. На курсе обычно сначала разбирают, чем эти методы отличаются по скорости и возвращаемому типу: одни возвращают живые HTMLCollection, другие — статические NodeList, и если этого не понимать, скрипт ведёт себя необъяснимо.
Изменение элементов. Создание новых узлов через document.createElement и append, удаление через remove, замена через replaceWith. Менять содержимое через textContent (безопасно) и innerHTML (быстро, но опасно с пользовательским вводом). Менять атрибуты через setAttribute или прямые свойства. Управлять классами через classList.add, remove, toggle — это удобнее, чем переписывать className вручную. Менять стили через style.color, style.display, либо переключать классы и хранить стили в CSS — второй подход сильно чище.
События. addEventListener с обработчиком клика, ввода, наведения, скролла. Объект события Event и его свойства (target, currentTarget, preventDefault). Всплытие и захват — то, что часто срывает первые попытки сделать модалку.
Делегирование событий. Один обработчик на родителе вместо тысячи на детях. Базовый паттерн оптимизации, который встречается в каждом фронтенд-собеседовании.
Работа с формами. input.value, checkbox.checked, событие submit, объект FormData для отправки данных. Валидация на лету и подсветка ошибочных полей.
На курсах эти темы дают не лекциями, а через задачи. Сначала разбираете типовой паттерн на примере, потом сами делаете аналог — модалку, выпадающий список, корзину, бесконечную ленту. К концу программы у вас в портфолио десяток мини-проектов, на которых видно: человек с DOM на «ты».
События в DOM — то, без чего интерфейс не оживёт
Если поиск и изменение элементов отвечают за статику, то события включают динамику. Пользователь кликает, печатает, скроллит, наводит курсор, перетаскивает картинку — всё это события, и на каждое можно повесить реакцию.
Базовый рабочий инструмент — element.addEventListener('click', handler). Внутрь обработчика приходит объект события, в котором есть target (на чём именно щёлкнули), currentTarget (на ком обработчик висит), preventDefault (отменить поведение по умолчанию, например переход по ссылке) и stopPropagation (остановить всплытие).
Всплытие. Событие сначала идёт от документа вглубь к цели (фаза захвата), потом обратно от цели к документу (фаза всплытия). Это даёт мощный приём — делегирование: вместо того чтобы вешать обработчик на каждую из 100 кнопок в списке, повесьте один на их общий родитель. Внутри проверяйте event.target и решайте, кому отвечать. Это экономит память и работает даже для элементов, которые добавятся в DOM позже.
На курсах часто отдельно разбирают дебаунс и тротлинг — ограничение частоты вызова обработчика. Пользователь крутит колесо мыши 60 раз в секунду, и если на каждое движение пересчитывать тяжёлую вёрстку, страница задыхается. Дебаунс отложит выполнение до конца жеста, тротлинг ограничит частоту. Эти приёмы применяют для скролла, ресайза окна, поиска по мере ввода.
Работа с формами через DOM
Форма на странице живёт по своим правилам. У каждого поля свой набор свойств: input.value для текста, checkbox.checked для галочки, select.selectedIndex для выпадающего списка. Чтобы перехватить отправку, вешают обработчик на событие submit у самой формы и при необходимости вызывают preventDefault, чтобы остановить штатную перезагрузку страницы.
Современный путь сборки данных — через объект FormData. Он автоматически собирает значения всех полей формы, готов к отправке через fetch, корректно обрабатывает файлы и чекбоксы. На курсах вы научитесь валидировать поля до отправки, помечать ошибочные, показывать всплывающие подсказки, отправлять данные на бекенд и обрабатывать ответ.
В России это особенно живая тема. Десятки тысяч лендингов крутятся на формах захвата, личных кабинетах и квизах — везде нужен фронтендер, который умеет аккуратно собрать данные и отправить их на сервер.
DOM и фреймворки — React, Vue, Angular
На собеседовании на джуниор-фронтенда часто звучит вопрос: «Зачем нужен чистый DOM, если есть React?» Ответ простой. React и другие фреймворки ничего не отменяют — они только надстраивают абстракцию над тем же DOM.
Внутри React работает с виртуальным DOM (Virtual DOM) — лёгкой копией дерева в памяти. Когда состояние меняется, React сравнивает новое виртуальное дерево со старым и обновляет в реальном DOM только то, что изменилось. Это быстрее, чем переписывать всё подряд вручную, но в основе по-прежнему те же document.createElement и appendChild.
Поэтому без понимания обычного DOM на фреймворках вы упрётесь в стену уже на первых нестандартных задачах:
- Интеграция со сторонней библиотекой, которая работает с реальным DOM (графики, карты, видеоплееры).
- Обработка фокуса, выделения, прокрутки — операций, которых нет в декларативной модели React.
- Отладка производительности — где именно случается лишний reflow и как его убрать.
- Простая страница без фреймворка, где React — оверкилл, а навык писать на чистом JS уже потерян.
Опытные тимлиды это знают. Поэтому в большинстве курсов фронтенд-разработки сначала идёт большой блок чистого DOM, а только потом — фреймворки и сборщики.
От jQuery к нативному DOM — почему стек поменялся
Если вы учились вёрстке до 2018 года или работали в продакшене старого проекта, скорее всего, в голове ещё лежит синтаксис jQuery: $('.btn').click(...), $.ajax(...), $('#modal').show(). В нулевые и начале десятых это было спасением — браузеры по-разному реализовывали DOM, jQuery скрывал различия и давал единый API.
За последние десять лет ситуация развернулась. Браузеры подтянули реализацию до общего стандарта, появились нормальные методы querySelector, classList, fetch, нативные модули и async/await. jQuery перестал быть необходимостью и стал лишней зависимостью на 90 КБ. Команды Bootstrap 5 и WordPress Core официально отказались от jQuery в новых версиях, а на собеседованиях знание jQuery уже не плюс, а нейтральный навык.
Что это значит для тех, кто учится сегодня:
- Сразу учите нативный DOM, без слоёв-обёрток. Время, потраченное на jQuery, не вернётся.
- Если попадаете в проект на jQuery — переводите в голове примеры на нативный JS. Это упражнение, а не дополнительный язык.
- Не обманывайтесь короткими записями типа
$('div'). Они кажутся проще, пока не понимаете, что под капотом, и не начинаете отлаживать чужой код.
Хороший курс по DOM в 2026 году пишет код современным синтаксисом: const, стрелочные функции, шаблонные строки, fetch вместо $.ajax, FormData вместо ручной сборки строк. Если в материалах курса встречается var, jQuery.Deferred или работа с XMLHttpRequest через колбэки — программа устарела. Подробный разбор, зачем новичку учить именно JavaScript, мы опубликовали в блоге — там же — про то, какой стек сегодня смотрят на собеседованиях.
Производительность и подводные камни
DOM работает медленнее, чем хочется. Каждый раз, когда вы меняете элемент, браузер пересчитывает раскладку (reflow) и заново рисует страницу (repaint). Если делать это в цикле сто раз подряд, интерфейс начнёт подтормаживать, а на слабых устройствах — откровенно тормозить.
На курсах есть отдельный блок про оптимизацию. Главные приёмы:
- Батчинг изменений. Вместо ста отдельных вставок — собрать всё в
DocumentFragmentи вставить одной операцией. Браузер пересчитает раскладку один раз вместо ста. - Минимум обращений к свойствам, вызывающим reflow.
offsetWidth,offsetHeight,getBoundingClientRectв цикле — частая причина просадок на анимациях. Считать значение один раз и работать с переменной. - Дебаунс и тротлинг на тяжёлых обработчиках скролла, ресайза, ввода в строку поиска.
requestAnimationFrameдля анимаций — синхронизация с кадровой частотой браузера, чтобы не отставать и не делать лишнего.- MutationObserver — наблюдатель за изменениями в DOM. Полезен, когда нужно реагировать на правки от чужого кода (виджеты, сторонние скрипты, расширения).
Эти приёмы редко дают на первом курсе по DOM. Они идут вторым шагом, когда базовая логика уже впечатывается в руку, и вы готовы думать о нагрузке.
Какие проекты собрать в портфолио после курса по DOM
Без портфолио курс по DOM не даёт работу. Студия или продукт смотрят не на сертификат, а на работающие примеры — что вы реально умеете руками. Хорошая программа по DOM закладывает в обязательную практику пять-семь типовых задач, которые потом можно показать на собеседовании.
Динамическая форма с валидацией. Регистрационная анкета: проверка email, телефона, длины пароля, мгновенная подсветка ошибок, отправка через fetch на учебный API. Закрывает работу с формами, событиями input и submit, объектом FormData и асинхронными запросами. Самый показательный проект для джуниор-вакансии.
Модальное окно своими руками. Без библиотек. Открытие по клику, закрытие по Escape и клику вне области, блокировка прокрутки фона, корректная работа с фокусом для доступности. Проверяет понимание событий, всплытия и обработки клавиатуры.
Бесконечная лента или подгрузка по кнопке «Ещё». Список карточек, который догружается через fetch и добавляется в DOM батчами. Внутри обязательно — наблюдение за скроллом через IntersectionObserver или тротлинг для совместимости со старыми браузерами.
Корзина интернет-магазина. Добавление товара, изменение количества, пересчёт суммы, синхронизация с localStorage. Один экран, но в нём собрано почти всё: события делегирования, изменение DOM, состояние, форматирование чисел.
Виджет погоды или конвертер валют. Запрос к публичному API, разбор ответа, отрисовка в DOM. Маленький, но законченный проект, который удобно класть как первую плитку портфолио.
Слайдер картинок без библиотек. Кнопки «вперёд-назад», точки внизу, автоматическая прокрутка, поддержка свайпа на мобильных. Тренирует работу с массивами элементов, таймерами и сенсорными событиями.
Все проекты выкладывают на GitHub, разворачивают на GitHub Pages или Netlify и дают живые ссылки. Работодатель кликает — видит, что код запускается, страница ведёт себя адекватно, в консоли нет ошибок. Этого достаточно, чтобы пройти первый этап и попасть на технический разговор.
Как выбрать курс по DOM
Сразу скажем: курсов «только про DOM» почти нет. Это слишком узкая тема, чтобы продавать её отдельно — обычно DOM идёт модулем внутри программ по JavaScript, фронтенд-разработке или большим программам профессии. Поэтому при выборе смотрите не на название, а на содержание модуля.
Что должно быть в программе. Поиск элементов всеми основными методами. Создание, удаление, перемещение узлов. Работа с атрибутами и классами. Все основные события. Делегирование. Формы и FormData. Базовая оптимизация (хотя бы reflow и батчинг). Если из этого списка выпадает половина — курс слишком поверхностный.
Сколько практики. DOM пальцами не выучить. Если в курсе 80% видео и 20% задач — пройдёте мимо понимания. Хорошее соотношение наоборот: короткая теория, много задач с автопроверкой, минимум 5–10 мини-проектов и одна сборная работа в конце модуля.
Проверка кода ментором. Ревью от практикующего разработчика стоит дорого, но именно оно отделяет «прошёл курс» от «понял тему». Дешёвые курсы часто без обратной связи — это нормально для первого захода, но если вы целитесь в работу — без ревью никак.
Уровень входа. Курсы по DOM требуют базы JavaScript: переменные, функции, циклы, условия, объекты. Если вы только сели за JS, идите сначала на курс по основам языка, потом возвращайтесь сюда.
Свежесть программы. JavaScript развивается быстро. var вместо let, jQuery в каждом примере, attachEvent вместо addEventListener — признаки, что курс не обновляли с 2018 года. Смотрите дату последнего обновления и комментарии за последний год.
Сколько стоят курсы и сколько идти до результата
Цены в каталоге — от 9 900 ₽ до 179 600 ₽, медиана 75 000 ₽. Разброс большой, потому что DOM встречается и в коротких практикумах за пару тысяч рублей, и внутри годовых программ профессии «фронтенд-разработчик» с трудоустройством. Считайте по таким ориентирам:
- 2–4 недели — практикум по DOM как отдельный навык. Цена в районе 9 900 ₽ — 75 000 ₽. Подходит, если уже знаете основы JS и хотите дотянуть конкретно эту тему.
- 2–4 месяца — курс по JavaScript, в котором DOM займёт треть программы. Это самый ходовой формат для начинающих, медианная цена близка к серединной точке каталога.
- 6–12 месяцев — фронтенд-программа целиком: HTML, CSS, JavaScript, DOM, React, Git, командная работа, проекты в портфолио. Самые дорогие варианты, но и результат — готовность к джуниор-вакансии.
На рынке труда фронтенд по-прежнему один из ходовых входов в IT. По свежим данным обзора зарплат веб-разработчиков, junior-фронтенд в России в 2026 году получает от 80–100 тысяч рублей в Москве и от 60–80 в регионах, middle — 150–250 тысяч, опытные сеньоры — выше 300. Курс с DOM в программе закладывает базовый билет в эту шкалу.
Кому подходит обучение работе с DOM
Тема нужна нескольким группам.
Верстальщикам, которые переходят в JavaScript. Вы уже умеете в HTML и CSS, и DOM — следующий логичный шаг. Без него вёрстка остаётся статичной. С ним — оживает: появляются валидации, аккордеоны, табы, бургер-меню без чужих библиотек.
Начинающим фронтенд-разработчикам. Если вы только начинаете путь, без DOM не будет ни одного работающего проекта в портфолио. Это первый блок, после которого код начинает что-то делать на странице.
Бэкендерам, которые хотят понимать фронт. На полном стеке полезно знать, как именно ваш JSON превращается в кнопки на экране. Курс по DOM закрывает этот пробел за пару недель.
Разработчикам, которые сидели на jQuery. jQuery в новых проектах не пишут уже лет восемь. Если вы переходите со старого стека на современный — обновите голову через нативный DOM.
Тем, кто учит React или Vue, но проседает в основах. Если фреймворк постоянно подкидывает странные баги с фокусом, прокруткой или интеграцией со сторонними виджетами — значит, базы не хватает. Возвращайтесь к чистому DOM на пару недель.
Как мы проверяем курсы по DOM в каталоге
В каталоге сейчас 25 курсов от российских и международных школ. Перед тем как добавить программу, мы смотрим на четыре вещи. Есть ли DOM в программе модуля — не упоминание в маркетинговом блоке, а реальный список тем с поиском элементов, событиями и работой с формами. Структура практики — сколько задач, есть ли автопроверка, делают ли студенты собственные мини-проекты. Обратная связь — менторское ревью, разбор ошибок, домашка с проверкой. Актуальность — дата последнего обновления программы и упоминания современных стандартов: ES6+, fetch, Promise, modules.
Дальше курс попадает в общую сортировку каталога. На странице вы видите программы в порядке релевантности запросу: первыми идут специализированные практикумы по DOM и курсы по JavaScript, потом — большие фронтенд-программы, в которых DOM занимает солидный модуль. Цены, длительность и рейтинг школ показываем в карточке честно — берём из официальных программ и сверяем при каждом обновлении каталога.
ТОП-5 лучших курсов по DOM в 2026 году
| № | Курс | Школа | Цена | Длительность | Рейтинг |
|---|---|---|---|---|---|
| 1 | JavaScript | Skillbox | 63 829 ₽ 127 659 ₽ | 3 месяца | |
| 2 | Frontend-разработчик с нуля | Нетология | 120 700 ₽ 223 573 ₽ | 10 месяцев | |
| 3 | Fullstack-разработчик на Python | Нетология | 175 800 ₽ 325 635 ₽ | 21 месяц | |
| 4 | Профессия «Frontend-разработчик с нуля до PRO» | Skillbox | 137 500 ₽ 275 000 ₽ | 10 месяцев | |
| 5 | Факультет fullstack JavaScript | GeekBrains | 134 700 ₽ 224 500 ₽ | 15 месяцев |
Преподаватели и эксперты по DOM
Отзывы об обучении DOM
Давно хотела освоить программу 1С: Бухгалтерия, мне это очень нужно по работе. Выбор пал на этот курс, так как по окончании обучения выдается соответствующий диплом. Мои впечатления: программа интересная, хорошая обратная связь, можно общаться в закрытой группе в мессенджере. Научилась…
Хочу выразить благодарность создателям за замечательный курс-симулятор «Тестировщик ПО» от SkillFactory. Это обучение в игровой форме! Масса полезного, все четко структурировано. Данная методика мне понравилась, получила нужные навыки, имею теперь четкие представления об этой профессии. Когда записывалась, знала только…
Мне сразу же понравился их подход к обучению. Чтобы вы лучше усвоили материал на курсе, перед обучением можно пройти вступительное испытание. Вы сразу оцените собственные знания и поймёте, насколько трудно или легко придётся в процессе. На мой взгляд, это забота…
Часто задаваемые вопросы о курсах по DOM
Что нужно знать перед курсом по работе с DOM?
База JavaScript: переменные, функции, массивы, объекты, циклы, условия. Без этого DOM учить смысла мало — методы работы с элементами оперируют функциями и объектами, и без понимания основ половина кода будет казаться магией. Если совсем нулевой уровень, начните с курса по основам JS, а потом возвращайтесь к DOM.
Сколько времени занимает освоение DOM на практическом уровне?
Базовый уровень — 2-4 недели при занятиях по 1-2 часа в день: поиск элементов, изменение содержимого, обработка событий, простые формы. Уверенное владение, включая делегирование, оптимизацию reflow и интеграцию с асинхронными запросами, — ещё 1-2 месяца практики на учебных проектах. Главное — решать задачи руками, а не смотреть видео.
Чем отличается работа с DOM от работы с jQuery?
jQuery — это библиотека-обёртка над DOM из 2000-х, которая сглаживала различия между браузерами и давала короткий синтаксис. Современные браузеры реализуют стандарт одинаково, поэтому jQuery в новых проектах не используют. Учить надо нативный DOM: querySelector, addEventListener, classList, fetch. Знание jQuery нужно только для поддержки старых проектов.
Можно ли изучить DOM без знания JavaScript?
Нет. DOM — это API для работы с HTML через JavaScript. Все методы (поиск, изменение, события) — это функции и объекты JS. Без базы языка курс по DOM превратится в заучивание заклинаний, а первая нестандартная задача всё сломает. Сначала JS, потом DOM.
Что такое Shadow DOM и нужен ли он на старте?
Shadow DOM — это инкапсулированное поддерево внутри элемента, изолированное от стилей и скриптов основной страницы. Используется в веб-компонентах и сторонних виджетах. На старте изучения не нужен: сначала освойте обычный DOM, формы, события и фреймворки. Shadow DOM пригодится позже, когда будете писать собственные переиспользуемые компоненты.
Достаточно ли бесплатных уроков на YouTube для трудоустройства?
Для понимания основ — да. Для портфолио и уверенности на собеседовании — нет. Платные курсы дают структуру, проверку кода ментором, обязательные проекты и обратную связь, которой в видео по определению нет. Если цель — работа, комбинируйте: бесплатные ресурсы для теории, платный курс с ревью для практики.
Нужно ли знать DOM для работы с React, Vue или Angular?
Базовое понимание обязательно. Фреймворки берут на себя рутину обновления интерфейса, но при интеграции со сторонними библиотеками, работе с фокусом, прокруткой, отладкой производительности или подключении карты/видеоплеера вы упрётесь в реальный DOM. Без основ дальше джуниора с фреймворками не уехать.
Можно ли освоить DOM за месяц?
Базовые навыки — да. За месяц при ежедневной практике вы научитесь искать элементы, менять содержимое, вешать обработчики событий и собирать простые формы. Продвинутые темы (делегирование, MutationObserver, оптимизация, Shadow DOM) требуют ещё пары месяцев и реальных проектов. Главное — практика, а не количество отсмотренных уроков.
Что выдают по итогам курса по работе с DOM?
Зависит от школы. Большинство онлайн-школ дают электронный сертификат о прохождении. Если курс длится от 250 часов и школа имеет образовательную лицензию, выдают диплом о профессиональной переподготовке государственного образца. Для джуниор-вакансии важнее не сертификат, а портфолио и понимание тем — спрашивают именно их.
Какие курсы по DOM стоят дешевле всего и есть ли бесплатные?
Бесплатные модули по DOM есть на learn.javascript.ru, MDN, htmlacademy (часть тем), Stepik. Платные практикумы с ревью кода начинаются примерно от 9 900 ₽ на коротких форматах. Для джуниор-портфолио комбинируйте: теория из бесплатных источников, практика и проверка кода — на платном курсе с ментором.
Что важнее для фронтендера: глубокий DOM или сразу React?
Сначала DOM, потом React. На собеседовании на джуниора часто дают задачу без фреймворка — реализовать модалку, тогл-меню или валидацию формы. Если вы умеете только React, такая задача ставит в тупик. Кроме того, сам React внутри работает с DOM, и понимание основ помогает читать ошибки и оптимизировать рендер.
Где практиковаться в DOM после курса?
Лучшее место — собственные мини-проекты на GitHub: модалка, слайдер, корзина, виджет погоды. Дополнительно — задачи на Codewars и LeetCode (раздел JavaScript), упражнения на htmlacademy и интерактивные упражнения в учебнике Ильи Кантора. Новый навык закрепляется только через регулярную практику, минимум час в день в течение месяца после курса.
Skillbox
Нетология
GeekBrains
SkillFactory
OTUS
Бруноям
ProductStar
HTML Academy
Skillbox Kids