Элегантный JavaScript: Современное введение в программирование
Полное руководство по современной разработке с использованием JavaScript. Курс охватывает основные принципы программирования, спецификацию языка JavaScript, интеграцию с веб-браузерами и разработку на стороне сервера с помощью Node.js, включая пять приложений из реального мира.
Обзор курса
📚 Краткое содержание
Полное руководство по современной программированию на языке JavaScript. В курсе рассматриваются основные принципы программирования, спецификация языка JavaScript, интеграция с веб-браузерами и разработка серверной части с использованием Node.js, включая пять приложений из реальной жизни.
Глубокое и изящное погружение в суть программирования на языке JavaScript.
Автор: Мариан Хавербеке
Благодарности: Поддерживается 454 финансовых спонсорами; иллюстрации от Васифа Хайдера, Макса Сянту, Маргариты Мартинес, Хосе Менора, Джима Тирни, Дайла МакГрегора, Джеффа Авваллоне, Томаса Палефа и Антонио Пердомо Пастора.
🎯 Цели обучения
- Определить, что такое программа, и объяснить различные уровни абстракции в языках программирования.
- Использовать числа и арифметические операторы в JavaScript для получения значений.
- Объявлять и обновлять переменные, соблюдая правила именования и ограничения на зарезервированные слова.
- Реализовывать надежный контроль потока с помощью
do-циклов,for-циклов и операторовswitch, поддерживая чистый код с помощью отступов и комментариев. - Определять и вызывать функции с использованием нескольких нотаций, обрабатывая параметры, необязательные аргументы и вложенные лексические области видимости.
- Применять продвинутые функциональные концепции, такие как рекурсия, замыкания и стек вызовов, для решения сложных алгоритмических задач.
- Использовать специализированные методы объектов и массивов для управления сложными структурами данных и строками.
- Реализовывать функции высшего порядка (
filter,map,reduce) для абстрагирования логики и композиции преобразований данных. - Навигировать и манипулировать цепочкой прототипов для создания структурированных, повторно используемых экземпляров объектов и полиморфных интерфейсов.
- Реализовывать полиморфные интерфейсы для обработки сложной визуализации данных (таблиц).
🔹 Урок 1: Основы JavaScript и структура программы
Обзор: Этот урок знакомит с фундаментальными понятиями программирования на языке JavaScript, переходя от философского определения программы к практической механике написания кода. Учащиеся исследуют, как данные представляются через типы и биты, как манипулировать значениями с помощью операторов, а также как структурировать программы с помощью переменных, выражений и операторов. Также рассматривается уникальное поведение JavaScript, такое как автоматическое приведение типов и короткое замыкание вычислений.
Результаты обучения:
- Определить, что такое программа, и объяснить различные уровни абстракции в языках программирования.
- Использовать числа и арифметические операторы в JavaScript для получения значений.
- Объявлять и обновлять переменные, соблюдая правила именования и ограничения на зарезервированные слова.
🔹 Урок 2: Функции и сложные структуры данных
Обзор: Этот урок исследует основные строительные блоки структурного программирования, сосредоточившись на продвинутых методах управления потоком, функциональных подходах и организации сложных данных. Учащиеся научатся инкапсулировать логику внутри функций, управлять видимостью переменных через области видимости и замыкания, а также работать с изменяемыми объектами для анализа реальных данных, таких как статистические корреляции.
Результаты обучения:
- Реализовывать надежный контроль потока с помощью
do-циклов,for-циклов и операторовswitch, поддерживая чистый код с помощью отступов и комментариев. - Определять и вызывать функции с использованием нескольких нотаций, обрабатывая параметры, необязательные аргументы и вложенные лексические области видимости.
- Применять продвинутые функциональные концепции, такие как рекурсия, замыкания и стек вызовов, для решения сложных алгоритмических задач.
🔹 Урок 3: Функции высшего порядка и прототипы
Обзор: Этот урок исследует переход от базовой манипуляции данными к продвинутым функциональным и объектно-ориентированным паттернам в JavaScript. Рассматриваются эффективные методы хранения данных с помощью Map и глобальных объектов, мощь функций высшего порядка для абстрагирования действий (фильтрация, трансформация, свёртка), а также внутренняя механика системы объектов в JavaScript, включая прототипы, конструкторы и полиморфизм.
Результаты обучения:
- Использовать специализированные методы объектов и массивов для управления сложными структурами данных и строками.
- Реализовывать функции высшего порядка (
filter,map,reduce) для абстрагирования логики и композиции преобразований данных. - Навигировать и манипулировать цепочкой прототипов для создания структурированных, повторно используемых экземпляров объектов и полиморфных интерфейсов.
🔹 Урок 4: Объектно-ориентированное программирование и управление ошибками
Обзор: Этот урок исследует продвинутые объектно-ориентированные паттерны в JavaScript, сосредоточившись на полиморфизме через интерфейсы таблицы и проектировании имитационной экосистемы ("Электронная жизнь"). Затем переходит к вопросам надежности программного обеспечения, охватывая "Строгий режим", техники отладки и важность структурированного тестирования для минимизации типичных ошибок программистов.
Результаты обучения:
- Реализовывать полиморфные интерфейсы для обработки сложной визуализации данных (таблиц).
- Сравнивать наследование и композицию для построения расширяемых структур объектов.
- Управлять контекстом выполнения (
this) внутри функций высшего порядка и методов объектов.
🔹 Урок 5: Сопоставление шаблонов и модульность
Обзор: Этот урок рассматривает двойную потребность современного программирования: обработку сложных строковых данных и организацию кода в удобные для поддержки структуры. Учащиеся узнают, как использовать регулярные выражения для описания и манипулирования текстовыми шаблонами, а затем изучают модульность для изоляции кода, управления пространствами имён и облегчения повторного использования.
Результаты обучения:
- Создавать и тестировать регулярные выражения с использованием литеральной и конструкторской нотации.
- Реализовывать продвинутые техники сопоставления шаблонов, включая группировку, обратный откат и нежадное повторение.
- Применять принципы модульного проектирования для предотвращения загрязнения пространства имён и отделения компонентов программы.
🔹 Урок 6: Проектирование языков и среда веба
Обзор: Этот урок исследует переход от структурированного проектирования программного обеспечения к созданию пользовательского языка программирования под названием "Яйцо". Он также связывает эти концепции со средой веба, подробно описывая, как сети, HTML и модель документа (DOM) создают программный интерфейс для браузеров. Учащиеся научатся управлять сложностью кода с помощью модульности и манипулировать живыми веб-документами с помощью JavaScript.
Результаты обучения:
- Реализовывать надёжные системы модулей с использованием функции
defineи управлять сложными зависимостями. - Создавать функциональный парсер и интерпретатор для доменного языка, включая управление областями видимости и поддержку функций.
- Объяснять архитектуру веба, включая протоколы TCP/IP, структуру HTML и безопасность браузерной песочницы.
🔹 Урок 7: События и интерактивные платформы
Обзор: Этот урок исследует синергию между манипулированием моделью документа (DOM), стилизацией с помощью CSS и сложной обработкой событий для создания интерактивных веб-приложений и игр. Учащиеся научатся управлять макетом и анимацией, управлять асинхронной природой пользовательских вводов, оптимизировать производительность с помощью временных техник и архитектурой платформенной игры на основе сетки с применением объектно-ориентальных принципов.
Результаты обучения:
- Манипулировать макетом и стилями DOM: использовать JavaScript для чтения размеров элементов, применения каскадных стилей и анимации элементов с помощью позиционирования по CSS и тригонометрии.
- Освоить управление событиями: реализовать продвинутую обработку событий, включая контроль распространения, предотвращение действия по умолчанию и управление специализированными событиями (клавиатура, мышь, прокрутка, фокус).
- Оптимизировать выполнение скриптов: применять веб-воркеры для фоновой обработки и использовать отложенную обработку/ограничение частоты для управления высокочастотными событиями.
🔹 Урок 8: Графика на холсте и сетевые протоколы
Обзор: Этот урок исследует переход от рендеринга игр на основе DOM к высокопроизводительному API HTML5 Canvas, а также основные механизмы физики 2D-платформеров. Учащиеся научатся реализовывать сложную игровую логику, включая гравитацию и обнаружение столкновений, одновременно осваивая императивные техники рисования. Кроме того, урок знакомит с протоколом HTTP и объектом XMLHttpRequest для обработки клиент-серверного взаимодействия.
Результаты обучения:
- Реализовывать детектирование столкновений на основе сетки и движение под действием гравитации в игровой среде.
- Использовать API HTML5 Canvas для рендеринга путей, кривых, изображений и анимированных спрайтов.
- Применять координатные преобразования (масштабирование, поворот, отражение) и управлять состоянием контекста с помощью
saveиrestore.
🔹 Урок 9: Расширенные формы и постоянные приложения
Обзор: Этот урок исследует продвинутые методы веб-разработки, сосредоточившись на асинхронной коммуникации через XMLHttpRequest и Promises, глубокой интеграции с полями форм HTML и сохранении данных на стороне клиента. Учащиеся научатся управлять сетевыми запросами с помощью кастомных заголовков и обрабатывать ошибки в асинхронных потоках, создавая модульное приложение для рисования и инструмент для заметок с сохранением состояния.
Результаты обучения:
- Настроить и выполнить асинхронные сетевые запросы с использованием
XMLHttpRequestи цепочек на основеPromise. - Манипулировать сложными поведениями форм, включая управление фокусом, отключение полей и работу с файлами.
- Реализовывать хранение данных на стороне клиента с помощью
localStorageиsessionStorageдля поддержания состояния приложения.
🔹 Урок 10: Разработка на сервере с использованием Node.js
Обзор: Этот урок закрывает пробел между продвинутой клиентской интерактивностью и серверной логикой. Учащиеся сначала освоят сложные инструменты манипулирования холстом и ограничения безопасности браузера, а затем перейдут в среду Node.js для создания асинхронных файловых серверов и реальных веб-приложений в реальном времени с использованием долгого опроса и маршрутизации по протоколу REST.
Результаты обучения:
- Реализовывать продвинутые инструменты рисования (Линия, Стирание, Брызги, Заливка) и управлять безопасностью холста (загрязнение).
- Выполнять серверные скрипты с использованием Node.js, управлять зависимостями через NPM и обрабатывать асинхронный ввод-вывод с помощью колбэков и
Promise. - Создавать функциональный HTTP-сервер, способный выполнять манипуляции с файлами, обрабатывать запросы в формате JSON и обеспечивать обновления в реальном времени через долгий опрос.