Основы веб-программирования: Полный цикл разработки

Курс предназначен для начинающих разработчиков и охватывает все ключевые этапы создания веб-приложений. Вы изучите верстку, клиентскую логику, работу с сервером и базами данных, а также основы деплоя проектов.

1. Введение в веб-технологии: семантическая верстка HTML и стилизация CSS

Введение в веб-технологии: семантическая верстка HTML и стилизация CSS

Добро пожаловать в курс «Основы веб-программирования: Полный цикл разработки». Это первая статья нашего путешествия, в которой мы заложим фундамент для всех будущих знаний. Сегодня мы разберем два кита, на которых держится весь визуальный интернет: HTML и CSS.

Когда вы открываете любой сайт — будь то социальная сеть, новостной портал или интернет-магазин — ваш браузер получает набор инструкций. Эти инструкции говорят ему, что показать и как это должно выглядеть. Именно этим мы и займемся: научимся создавать структуру контента и придавать ей красивый внешний вид.

Как работает веб: краткий обзор

Прежде чем писать код, важно понять, как информация попадает на ваш экран. Интернет работает по модели «Клиент-Сервер».

  • Клиент (ваш браузер) отправляет запрос на получение страницы.
  • Сервер (удаленный компьютер) обрабатывает запрос и отправляет обратно файлы.
  • Браузер читает эти файлы и отрисовывает страницу.
  • !Простая схема обмена данными между пользователем и сервером

    Файлы, которые приходят с сервера, обычно делятся на три типа:

  • HTML (HyperText Markup Language) — структура и содержание.
  • CSS (Cascading Style Sheets) — внешний вид и стиль.
  • JavaScript — интерактивность и поведение (этого мы коснемся в следующих модулях).
  • HTML: Скелет вашего сайта

    HTML — это язык гипертекстовой разметки. Важно понимать: это не язык программирования в классическом понимании (здесь нет переменных или циклов), это язык структуры.

    Представьте, что вы строите дом. HTML — это бетонные плиты, кирпичи, балки и перекрытия. Без них у вас не будет дома, а будет просто куча стройматериалов.

    Синтаксис тегов

    HTML состоит из элементов, которые мы называем тегами. Большинство тегов являются парными: у них есть открывающая часть и закрывающая часть.

  • <p> — открывающий тег.
  • Это параграф текста. — контент.
  • </p> — закрывающий тег (обратите внимание на слэш /).
  • Существуют и одиночные теги, например, <img> для изображений или <br> для переноса строки, которым не нужно закрытие, так как у них нет текстового содержимого внутри.

    Семантическая верстка: почему это важно?

    В прошлом веб-разработчики использовали универсальный тег <div> для всего подряд. Код выглядел примерно так:

    Это работает, но это плохая практика. Браузер не понимает, что внутри первого div находится именно шапка сайта, а не просто текст.

    Семантическая верстка подразумевает использование тегов, которые своим названием говорят о предназначении контента. Это критически важно для:

  • SEO (Search Engine Optimization): Поисковые системы (Google, Яндекс) лучше понимают структуру вашего сайта и выше ранжируют его.
  • Доступности (Accessibility): Скринридеры (программы для незрячих людей) используют эти теги для навигации по странице.
  • Вот как выглядит тот же пример с использованием семантических тегов HTML5:

    Основные семантические теги

  • <header>: Вводная часть страницы или секции (логотип, заголовок).
  • <nav>: Блок навигации с ссылками.
  • <main>: Основное уникальное содержимое страницы. На странице должен быть только один main.
  • <section>: Тематическая группировка контента (например, секция «О нас» или «Отзывы»).
  • <article>: Самодостаточный контент, который имеет смысл даже в отрыве от сайта (статья в блоге, новость).
  • <aside>: Контент, косвенно связанный с основным (боковая панель, реклама).
  • <footer>: Подвал сайта (копирайт, контакты).
  • !Структура веб-страницы, построенная на семантических тегах HTML5

    CSS: Одежда для вашего кода

    Если HTML — это скелет, то CSS — это кожа, одежда и макияж. CSS отвечает за цвета, шрифты, отступы и расположение элементов.

    Как работает CSS

    CSS использует правила, состоящие из селектора и блока объявлений.

  • p — это селектор. Он говорит браузеру: «Найди все параграфы на странице».
  • color: red; — это свойство и значение. Оно говорит: «Сделай текст красным».
  • Подключение CSS

    Лучший способ подключить стили — создать отдельный файл (например, style.css) и связать его с HTML-файлом через тег <link> внутри секции <head>:

    Классы и Идентификаторы

    Стилизовать все параграфы одинаково — редкость. Чаще нам нужно выделить конкретный элемент. Для этого используются атрибуты class и id.

  • Класс (.classname): Можно использовать многократно на одной странице. Идеально для групп элементов.
  • HTML: CSS:

  • Идентификатор (#idname): Должен быть уникальным на странице (встречаться только один раз).
  • HTML: CSS:

    > Хорошим тоном считается использование классов для стилизации, а идентификаторов — преимущественно для якорей ссылок или привязки JavaScript, чтобы избежать конфликтов специфичности стилей.

    Блочная модель (Box Model)

    Это самая важная концепция в CSS, которую новички часто понимают неправильно. Каждый элемент на веб-странице — это прямоугольный ящик (box).

    Даже если вы видите круглую кнопку или текст, для браузера это прямоугольник, который состоит из четырех слоев:

  • Content (Контент): Сам текст или изображение.
  • Padding (Внутренний отступ): Пространство между контентом и границей. Представьте это как «воздух» внутри коробки, защищающий содержимое от стенок.
  • Border (Граница): Рамка вокруг элемента.
  • Margin (Внешний отступ): Пространство снаружи границы, отделяющее элемент от соседей.
  • !Визуальное представление блочной модели: контент, внутренние отступы, границы и внешние отступы

    Рассмотрим пример:

    Вопрос: какова полная ширина этого элемента на экране?

    Многие ответят 100px, но это неверно (в стандартной модели браузера). Давайте посчитаем:

    Где — полная ширина элемента, — ширина контента, заданная в CSS, — внутренние отступы, а — толщина границ.

    Подставим наши значения:

    Итого элемент займет 150 пикселей в ширину, плюс по 30 пикселей внешнего отступа (margin) с каждой стороны, которые будут отталкивать другие элементы.

    Чтобы избежать этой математики и сделать верстку более предсказуемой, профессионалы используют свойство:

    С этим свойством width: 100px будет означать полную ширину элемента, включая padding и border, а браузер сам уменьшит место под контент.

    Практический пример

    Давайте соберем всё вместе. Мы создадим карточку товара.

    HTML (index.html):

    CSS (style.css):

    В этом примере мы использовали семантический тег <article>, так как карточка товара — это самостоятельная единица контента. Мы использовали классы для стилизации, задали внутренние отступы (padding), чтобы текст не прилипал к краям, и добавили интерактивности через псевдокласс :hover.

    Заключение

    Сегодня мы познакомились с языком разметки HTML и языком стилей CSS. Мы узнали, что:

  • HTML создает структуру и смысл (семантику).
  • CSS отвечает за визуальное представление.
  • Семантическая верстка важна для поисковиков и доступности.
  • Блочная модель — это основа понимания размеров и отступов элементов.
  • В следующей статье мы углубимся в создание сложных макетов и узнаем, как располагать элементы на странице не просто друг под другом, а в виде сеток и колонок.

    > Для дополнительного чтения рекомендую ознакомиться с документацией MDN Web Docs — это «библия» веб-разработчика.

    2. Интерактивность на стороне клиента: основы JavaScript и манипуляция DOM-деревом

    Интерактивность на стороне клиента: основы JavaScript и манипуляция DOM-деревом

    Мы продолжаем наш курс «Основы веб-программирования: Полный цикл разработки». В предыдущей статье мы научились создавать структуру страницы с помощью HTML и придавать ей стиль, используя CSS. Теперь у нас есть красивый, но статичный «манекен». Пришло время вдохнуть в него жизнь.

    Сегодня мы поговорим о JavaScript — языке программирования, который заставляет сайты реагировать на действия пользователя. Мы разберем, как браузер строит модель страницы и как мы можем изменять её в реальном времени.

    JavaScript: Мозг вашего сайта

    Если HTML — это скелет, а CSS — это внешность, то JavaScript (или просто JS) — это нервная система и мышцы. Именно он отвечает за то, что происходит, когда вы нажимаете кнопку «Купить», листаете галерею изображений или получаете уведомление о новом сообщении без перезагрузки страницы.

    JavaScript — это полноценный язык программирования. В отличие от HTML (языка разметки) и CSS (языка стилей), здесь есть логика, условия, циклы и вычисления.

    Где пишется код?

    Как и в случае с CSS, код JavaScript можно писать прямо в HTML, но профессиональный стандарт — использовать отдельный файл с расширением .js. Подключается он перед закрывающим тегом </body>:

    Мы размещаем его в конце, чтобы браузер сначала успел отрисовать HTML-элементы, и только потом загрузил скрипт, который будет ими управлять.

    Основы синтаксиса: Переменные и Данные

    Прежде чем управлять элементами, нужно понять, как хранить информацию. В JavaScript для этого используются переменные — именованные хранилища данных.

    В современном стандарте (ES6+) мы используем два ключевых слова для создания переменных:

  • let — для переменных, значение которых может меняться.
  • const — для констант, значение которых задается один раз и навсегда.
  • Типы данных

    JavaScript умеет работать с разными типами информации:

    * String (Строка): Текст в кавычках ("Привет", 'Мир'). * Number (Число): Любые числа (42, 3.14, -10). * Boolean (Булево значение): Логический тип, только true (истина) или false (ложь).

    DOM: Карта вашей страницы

    Самая важная концепция для веб-разработчика — это DOM (Document Object Model), или Объектная Модель Документа.

    Когда браузер загружает HTML-файл, он не просто рисует картинку. Он создает в памяти древовидную структуру всех элементов. Каждый тег, каждый кусок текста, каждый атрибут становится объектом, с которым можно взаимодействовать через JavaScript.

    Представьте генеалогическое древо. Есть предок (html), у него есть дети (head и body), у body есть свои дети (например, header, main, footer), и так далее.

    !Визуализация структуры DOM-дерева, показывающая иерархическую вложенность HTML-элементов.

    Благодаря DOM, JavaScript видит страницу не как текст, а как набор объектов. Мы можем:

  • Найти любой элемент в этом дереве.
  • Изменить его свойства (текст, цвет, видимость).
  • Удалить его или добавить новый.
  • Поиск элементов на странице

    Чтобы чем-то управлять, это нужно сначала найти. В JavaScript есть мощный метод для поиска элементов — querySelector.

    Он использует те же селекторы, что и CSS. Если вы знаете, как стилизовать элемент в CSS, вы знаете, как найти его в JS.

    Предположим, у нас есть такой HTML:

    В JavaScript мы можем найти эти элементы и сохранить их в переменные:

    > Если вам нужно найти все элементы с определенным классом, используется метод querySelectorAll, который вернет список элементов.

    Манипуляция элементами

    Теперь, когда у нас есть ссылка на элемент в переменной, мы можем его менять. Давайте рассмотрим основные свойства.

    Изменение содержимого

    Свойство textContent позволяет читать или менять текст внутри элемента.

    Изменение стилей

    Мы можем менять CSS-свойства прямо из кода через объект style. Обратите внимание: свойства, которые в CSS пишутся через дефис (например, background-color), в JavaScript пишутся в верблюжьем регистре (camelCase) — backgroundColor.

    Управление классами

    Менять стили по одному неудобно. Гораздо лучше заранее описать класс в CSS, а через JS просто добавлять или убирать его. Для этого используется свойство classList.

    События: Реакция на действия пользователя

    Самое интересное начинается, когда сайт реагирует на действия пользователя. В браузере любое действие (клик, наведение мыши, нажатие клавиши) называется событием (Event).

    Мы можем «повесить слушатель» на элемент. Это как сказать кнопке: «Жди, пока на тебя кликнут, и когда это случится — выполни эту функцию».

    Для этого используется метод addEventListener.

    Синтаксис события

    Давайте создадим кнопку, которая при клике меняет заголовок страницы.

    HTML:

    JavaScript:

    Теперь при нажатии на кнопку текст заголовка изменится и станет синим.

    Функции

    В примере выше мы использовали конструкцию function() { ... }. Это функция — блок кода, который выполняется только тогда, когда его вызывают (в данном случае, когда происходит клик).

    Функции — это фундаментальный строительный блок JavaScript. Они позволяют группировать команды.

    Практический пример: Счётчик лайков

    Давайте соберем все знания вместе и реализуем классический элемент интерфейса — кнопку «Лайк» со счетчиком.

    Задача: Есть кнопка и число. При нажатии на кнопку число должно увеличиваться на единицу.

    HTML:

    JavaScript:

    Каждый раз, когда пользователь кликает на кнопку, JavaScript берет текущее значение переменной likes, прибавляет к нему единицу и записывает новый результат внутрь тега <span>.

    Заключение

    Сегодня мы сделали огромный шаг вперед. Мы перешли от статической верстки к динамическому программированию. Мы узнали:

  • JavaScript — это язык, управляющий поведением страницы.
  • DOM — это представление HTML-страницы в виде дерева объектов.
  • С помощью querySelector можно находить элементы.
  • С помощью textContent и style можно менять элементы.
  • addEventListener позволяет реагировать на действия пользователя.
  • В следующей статье мы углубимся в работу с данными: научимся создавать списки, работать с формами и отправлять данные на сервер.

    > Для более глубокого изучения методов работы с DOM рекомендую обратиться к документации MDN Web Docs.

    3. Серверная часть веб-приложений: архитектура Backend и работа с API

    Серверная часть веб-приложений: архитектура Backend и работа с API

    Мы продолжаем наш курс «Основы веб-программирования: Полный цикл разработки». В предыдущих модулях мы научились верстать красивые интерфейсы с помощью HTML и CSS, а также добавили им интерактивности, используя JavaScript. Мы создали то, что видит пользователь — Frontend.

    Но задумывались ли вы, где хранятся все товары интернет-магазина? Как социальная сеть помнит ваш пароль? Почему сообщения в чате появляются у собеседника мгновенно? За всё это отвечает «теневая» сторона веба — Backend.

    В этой статье мы разберем, как устроен сервер, что такое базы данных и как клиентская часть общается с серверной через API.

    Что такое Backend?

    Если Frontend — это фасад здания, витрина и интерьер, то Backend — это фундамент, коммуникации, складские помещения и администрация. Это всё то, что скрыто от глаз посетителя, но без чего здание не может функционировать.

    Backend (бэкенд) — это программно-аппаратная часть сервиса, отвечающая за логику работы сайта, хранение данных и их обработку.

    Архитектура Клиент-Сервер

    Веб работает по модели «Клиент-Сервер». Давайте вспомним эту концепцию, но теперь углубимся в роль сервера.

  • Клиент (Frontend): Ваш браузер или мобильное приложение. Он отправляет запросы.
  • Сервер (Backend): Удаленный компьютер, который принимает запрос, обрабатывает его и отправляет ответ.
  • !Схематичное изображение обмена данными между клиентом и сервером.

    Когда вы вводите логин и пароль, браузер не проверяет их сам. Он отправляет их на сервер. Сервер ищет пользователя в базе данных, сверяет пароли и говорит браузеру: «Всё верно, пускай» или «Ошибка, пароль неверный».

    Из чего состоит Backend?

    Серверная часть обычно состоит из трех ключевых компонентов:

  • Сервер (Железо и ПО): Физический компьютер и программа (например, Nginx или Apache), которая «слушает» интернет и ловит входящие запросы.
  • Приложение (Логика): Код, написанный на серверном языке программирования (Python, Node.js, PHP, Java, Go). Именно здесь принимаются решения.
  • База данных (Память): Место, где информация хранится структурированно и надежно.
  • Базы данных: Хранилище знаний

    Представьте, что вы ведете учет книг в библиотеке. Вы можете записывать всё в один текстовый файл. Но когда книг станет миллион, поиск нужной займет вечность. Базы данных (БД) решают эту проблему.

    Существует два основных типа баз данных:

    * Реляционные (SQL): Данные хранятся в строгих таблицах, связанных друг с другом. Примеры: PostgreSQL, MySQL. Это похоже на набор таблиц Excel, которые умеют ссылаться друг на друга. * Не реляционные (NoSQL): Данные хранятся в виде документов или графов, без жесткой структуры. Примеры: MongoDB, Redis. Это больше похоже на папку с документами разного формата.

    API: Язык общения

    Как Frontend (JavaScript) понимает Backend (например, Python)? Они говорят на разных языках. Им нужен переводчик или универсальный протокол. Этим протоколом является API.

    API (Application Programming Interface) — это набор правил, по которым одна программа может взаимодействовать с другой.

    Аналогия с рестораном

    Чтобы понять API, представьте ресторан:

    * Вы (Клиент/Frontend): Сидите за столиком и хотите есть. Вы не можете просто пойти на кухню и начать готовить. * Кухня (Сервер/Backend): Там хранятся продукты (База данных) и повара готовят блюда (Логика). * Официант (API): Это посредник. Вы даете ему заказ (Запрос) по меню (Документация API). Официант относит заказ на кухню, ждет приготовления и приносит вам еду (Ответ).

    Если вы попросите блюдо, которого нет в меню, официант скажет, что это невозможно. Так же работает и API: сервер предоставляет список доступных команд (эндпоинтов), к которым можно обращаться.

    REST API и методы HTTP

    Самый популярный стандарт общения в вебе сегодня — это REST (Representational State Transfer). Он использует протокол HTTP и его методы для управления данными.

    Представьте, что мы работаем со списком пользователей. Вот как основные действия (CRUD — Create, Read, Update, Delete) ложатся на методы HTTP:

  • GET: Получить данные. (Аналог: Read)
  • * Пример: GET /users — дай мне список всех пользователей.
  • POST: Отправить новые данные. (Аналог: Create)
  • * Пример: POST /users — создай нового пользователя (данные передаются в теле запроса).
  • PUT / PATCH: Обновить данные. (Аналог: Update)
  • * Пример: PUT /users/15 — обнови информацию о пользователе с ID 15.
  • DELETE: Удалить данные. (Аналог: Delete)
  • * Пример: DELETE /users/15 — удали пользователя с ID 15.

    Формат данных JSON

    В предыдущей статье мы говорили об объектах JavaScript. Для передачи данных между сервером и клиентом используется формат JSON (JavaScript Object Notation). Это текстовый формат, который легко читается и людьми, и машинами.

    Вот как выглядит типичный ответ сервера в формате JSON:

    Браузер получает этот текст, и с помощью JavaScript превращает его обратно в живой объект, который можно использовать для отрисовки интерфейса.

    Коды состояния HTTP

    Когда сервер отвечает на запрос, он всегда присылает трехзначный код, который сообщает о результате операции. Вы наверняка видели некоторые из них.

    * 2xx (Успех): Всё прошло хорошо. * 200 OK: Запрос выполнен успешно. * 201 Created: Ресурс успешно создан (обычно после POST). * 3xx (Перенаправление): Нужно пойти по другому адресу. * 301 Moved Permanently: Страница переехала навсегда. * 4xx (Ошибка клиента): Вы что-то сделали не так. * 400 Bad Request: Сервер не понял запрос. * 401 Unauthorized: Вы не авторизованы (нужно войти в систему). * 404 Not Found: Запрашиваемый ресурс не найден. * 5xx (Ошибка сервера): Проблема на стороне сервера. * 500 Internal Server Error: Сервер сломался, но не знает почему. * 503 Service Unavailable: Сервер перегружен или на обслуживании.

    !Визуальная группировка кодов ответа сервера по типам.

    Практический пример взаимодействия

    Давайте проследим полный путь данных на примере формы регистрации.

  • Действие: Пользователь вводит email и пароль на сайте и нажимает «Зарегистрироваться».
  • Frontend (JS): Собирает данные из полей ввода, формирует JSON-объект и отправляет POST запрос на адрес https://api.mysite.com/register.
  • Сеть: Запрос летит через интернет к серверу.
  • Backend (Сервер):
  • * Принимает запрос. * Проверяет, не занят ли такой email. * Хеширует (шифрует) пароль (никогда не храните пароли в открытом виде!). * Сохраняет нового пользователя в Базу Данных.
  • Backend (Ответ): Отправляет код 201 Created и сообщение {"status": "success", "userId": 555}.
  • Frontend (JS): Получает ответ, видит успех и перенаправляет пользователя в личный кабинет.
  • Заключение

    Сегодня мы заглянули под капот веб-технологий. Мы узнали, что:

    * Backend отвечает за логику и данные. * Базы данных (SQL и NoSQL) хранят информацию. * API служит мостом между клиентом и сервером. * JSON — это универсальный формат обмена данными.

    Понимание того, как данные путешествуют от базы данных до экрана пользователя, делает вас настоящим разработчиком полного цикла. В следующих статьях мы объединим все знания и попробуем спроектировать полноценное приложение.

    > «API — это пользовательский интерфейс для разработчиков». — Неизвестный автор

    Для углубленного изучения рекомендую ознакомиться с документацией по протоколу HTTP на MDN Web Docs.

    4. Хранение и обработка информации: введение в базы данных и SQL

    Хранение и обработка информации: введение в базы данных и SQL

    Мы продолжаем наш курс «Основы веб-программирования: Полный цикл разработки». В прошлой статье мы разобрали архитектуру Backend и узнали, что сервер обрабатывает запросы и отправляет ответы. Мы упомянули, что данные хранятся в базах данных, но не углублялись в детали. Сегодня мы откроем дверь в «святая святых» любого приложения — хранилище информации.

    Представьте себе огромный интернет-магазин. Тысячи товаров, миллионы пользователей, история заказов за десять лет. Как найти, что именно купил пользователь Иван Петров в 2018 году, за доли секунды? Обычные текстовые файлы здесь не справятся. Здесь на сцену выходят Базы Данных (БД).

    Почему не просто файлы?

    Новички часто спрашивают: «Почему нельзя хранить данные в JSON-файле на сервере?». Ведь мы уже умеем работать с JSON.

    Представим, что мы записываем всех пользователей в один файл users.json. Пока их 100, всё работает быстро. Но когда их станет 1 000 000:

  • Скорость: Чтобы найти одного человека, компьютеру придется прочитать весь файл целиком.
  • Память: Весь файл нужно загрузить в оперативную память.
  • Конкурентность: Что если два человека одновременно захотят изменить свои данные? Файл может быть перезаписан некорректно, и данные одного из них пропадут.
  • Базы данных — это специализированные программы, которые решают эти проблемы. Они умеют быстро искать, надежно хранить и позволяют тысячам пользователей работать с информацией одновременно.

    Реляционные базы данных: Мир таблиц

    Существует много видов баз данных, но «золотым стандартом» в веб-разработке остаются реляционные базы данных (от англ. relation — отношение, связь). Самые популярные из них: PostgreSQL, MySQL, SQLite.

    В реляционной базе данных информация хранится в таблицах. Это очень похоже на Excel, но гораздо строже и мощнее.

    Структура таблицы

    Давайте рассмотрим структуру типичной таблицы Users (Пользователи):

    | id | name | email | age | | :--- | :--- | :--- | :--- | | 1 | Алексей | alex@example.com | 25 | | 2 | Мария | maria@site.org | 30 | | 3 | Иван | ivan@test.net | 17 |

    Основные элементы:

  • Таблица (Table): Хранилище объектов одного типа (например, только пользователи или только товары).
  • Столбец (Column): Атрибут объекта (имя, email, возраст). У каждого столбца есть строгий тип данных (число, строка, дата).
  • Строка (Row): Конкретная запись (один пользователь Алексей).
  • Первичный ключ (Primary Key): Уникальный идентификатор записи. В нашем примере это столбец id. Даже если у двух пользователей одинаковые имена и возраст, их id всегда будут разными.
  • !Визуализация связи между таблицей пользователей и таблицей их заказов через уникальный идентификатор.

    SQL: Язык общения с данными

    Чтобы сказать базе данных «Найди мне пользователя с id 5» или «Добавь новый товар», мы используем специальный язык — SQL (Structured Query Language). Это язык структурированных запросов.

    SQL — это декларативный язык. Это значит, что вы говорите компьютеру, что вы хотите получить, а не как это сделать. Вы не пишете циклы или алгоритмы поиска, база данных делает это за вас.

    Рассмотрим четыре основные операции, которые называют аббревиатурой CRUD (Create, Read, Update, Delete).

    1. Создание таблицы (Create Table)

    Прежде чем хранить данные, нужно создать структуру. Представьте, что мы создаем пустой бланк для заполнения.

    Здесь мы говорим: создай таблицу Users с полями id (автоматический номер), name (текст), email (текст) и age (целое число).

    2. Добавление данных (Insert)

    Теперь добавим нового пользователя в нашу таблицу.

    База данных сама присвоит ему уникальный id и сохранит строку.

    3. Чтение данных (Select)

    Это самая частая операция. Мы хотим получить информацию. Самый простой запрос выглядит так:

    Звездочка * означает «покажи все столбцы». Этот запрос вернет вообще всех пользователей.

    Но обычно нам нужно что-то конкретное. Для этого используется оператор WHERE (где).

    Этот запрос можно перевести так: «Выбери имя и email из таблицы Пользователи, где возраст больше 18».

    Здесь мы используем математическое сравнение. В логике баз данных условие фильтрации можно записать формулой:

    Где — результат запроса (набор найденных строк), — исходная таблица, — конкретная строка в таблице, а — значение возраста в этой строке. Мы отбираем только те , для которых условие истинно.

    4. Обновление данных (Update)

    Если Дмитрий постарел на год, нам нужно обновить запись.

    Важно: Всегда используйте WHERE при обновлении или удалении! Если забыть написать условие WHERE, база данных обновит возраст всем пользователям в таблице.

    5. Удаление данных (Delete)

    Удалим пользователя, который отписался от сервиса.

    Связи между таблицами

    Сила реляционных баз данных — в связях. Представьте, что у нас есть таблица Orders (Заказы). Мы не будем писать имя заказчика в каждый заказ. Вместо этого мы запишем туда только его id.

    Таблица Orders: | id | product | price | user_id | | :--- | :--- | :--- | :--- | | 101 | Ноутбук | 50000 | 2 | | 102 | Мышка | 1000 | 2 |

    В колонке user_id стоит число 2. База данных знает, что это ссылка на пользователя с id=2 из таблицы Users (это Мария). Такая колонка называется Внешний ключ (Foreign Key).

    Чтобы получить список покупок Марии вместе с её именем, мы используем операцию JOIN (объединение):

    Этот запрос виртуально «склеит» две таблицы в местах, где совпадают ID, и выдаст красивый результат.

    Индексы: Ускорение поиска

    Представьте, что вы ищете слово в словаре. Вы не читаете все страницы подряд, вы используете алфавитный указатель или оглавление. В базах данных роль оглавления играют индексы.

    Если мы часто ищем пользователей по email, мы можем создать индекс для этого столбца. База данных построит специальную древовидную структуру, которая позволит находить нужный email мгновенно, не перебирая миллионы строк.

    Эффективность поиска с индексом можно описать через логарифмическую сложность:

    Где — оценка сложности алгоритма (время выполнения), — двоичный логарифм, а — количество записей в таблице. Без индекса сложность была бы (линейная), то есть время поиска росло бы прямо пропорционально количеству записей.

    Транзакции: Всё или ничего

    Финансовые операции требуют особой надежности. Представьте, что вы переводите деньги другу. Процесс состоит из двух шагов:

  • Списать 1000 рублей у вас.
  • Начислить 1000 рублей другу.
  • Что произойдет, если на первом шаге деньги списались, а на втором сервер выключился из-за сбоя электричества? Деньги исчезли?

    Чтобы этого не случилось, SQL поддерживает транзакции. Транзакция гарантирует: либо выполнятся все команды внутри неё, либо, в случае ошибки, не выполнится ни одна (все изменения откатятся назад).

    Это принцип ACID, где буква A означает Atomicity (Атомарность) — неразделимость операции.

    Заключение

    Сегодня мы познакомились с фундаментом хранения данных. Мы узнали, что:

  • Реляционные базы данных хранят информацию в связанных таблицах.
  • SQL — это язык для управления этими данными.
  • Каждая запись имеет уникальный Primary Key.
  • Таблицы связываются через Foreign Key.
  • Транзакции защищают данные от сбоев.
  • Теперь у нас есть полный набор знаний: HTML/CSS для внешнего вида, JavaScript для поведения, Backend для логики и База Данных для памяти. В следующих статьях мы начнем объединять эти части в единую систему.

    > «Данные — это новая нефть». — Клайв Хамби, британский математик и предприниматель

    Для практики SQL рекомендую интерактивный тренажер SQLBolt — это отличный способ закрепить теорию на практике.

    5. Инструменты профессионала: системы контроля версий Git и развертывание проекта

    Инструменты профессионала: системы контроля версий Git и развертывание проекта

    Поздравляю! Вы прошли огромный путь. Мы начали с простых HTML-тегов, научили страницу выглядеть красиво с CSS, добавили ей «мозги» с помощью JavaScript, разобрались, как работает серверная часть, и научились хранить данные в SQL-таблицах. У вас на руках есть все компоненты полноценного веб-приложения.

    Но есть одна проблема: всё это работает только на вашем компьютере (на localhost). Никто в интернете не может увидеть ваше творение. Кроме того, если вы случайно удалите важный файл или захотите поэкспериментировать с кодом, вы рискуете сломать всё, что строили неделями.

    В этой, завершающей статье основного цикла, мы разберем два критически важных навыка для любого разработчика: контроль версий (Git) и развертывание (Deployment).

    Проблема сохранения прогресса

    Вспомните, как вы писали курсовую работу или диплом. Скорее всего, ваша папка выглядела так:

    * diplom.doc * diplom_final.doc * diplom_final_ispravleno.doc * diplom_final_tochno_final_v2.doc

    Это примитивный контроль версий. В программировании такой подход не работает. Проекты состоят из сотен файлов. Если вы измените код в десяти местах, а потом поймете, что всё сломалось, кнопка «Отменить» (Ctrl+Z) вас не спасет, если вы уже закрыли редактор.

    Здесь на сцену выходит Git.

    Git: Машина времени для вашего кода

    Git — это распределенная система контроля версий. Представьте, что это супер-продвинутая система сохранения в видеоигре.

    Git позволяет:

  • Сохранять «снимки» (snapshots) состояния всего проекта.
  • Возвращаться к любому прошлому сохранению.
  • Создавать параллельные вселенные (ветки), где вы можете экспериментировать, не ломая основную игру.
  • Объединять работу нескольких людей в один проект.
  • Основные понятия Git

    Чтобы начать работать, нужно запомнить несколько терминов:

    * Репозиторий (Repository): Папка вашего проекта, за которой следит Git. Это ваше хранилище. * Коммит (Commit): Фиксация изменений. Это то самое «сохранение». У каждого коммита есть уникальный код (хеш) и комментарий автора. * Ветка (Branch): Независимая линия разработки. Основная ветка обычно называется main или master.

    !Визуализация процесса ветвления и слияния в Git: основная ветка, создание новой ветки для фичи и последующее объединение.

    Жизненный цикл изменений

    Работа в Git похожа на отправку посылки. Она проходит три стадии:

  • Рабочая директория (Working Directory): Вы просто пишете код. Файлы изменены, но Git пока не подготовил их к сохранению.
  • Индекс (Staging Area): Вы выбираете, какие именно файлы попадут в следующий коммит. Это как положить вещи в коробку перед тем, как заклеить её скотчем.
  • Репозиторий (History): Вы делаете коммит. Коробка запечатана, подписана и отправлена на склад вечного хранения.
  • Базовые команды консоли

    Профессионалы работают с Git через терминал (консоль). Вот команды, которые вы будете использовать 90% времени:

    * git init — превращает текущую папку в репозиторий Git. * git status — показывает, какие файлы изменены и в какой стадии они находятся. * git add <имя_файла> — добавляет файл в индекс (подготовка к коммиту). Чтобы добавить всё сразу, используют git add . * git commit -m "Описание изменений" — создает коммит с вашим комментарием. * git log — показывает историю всех сохранений (кто, когда и что сделал).

    > «Коммитьте часто, коммитьте рано». Хороший тон — делать коммит на каждое логически завершенное действие (исправил кнопку, добавил форму, поправил стили), а не один коммит на всю неделю работы.

    Git vs GitHub: В чем разница?

    Новички часто путают эти понятия.

    * Git — это программа, установленная на вашем компьютере. Инструмент. * GitHub (или GitLab, Bitbucket) — это веб-сервис, хостинг для ваших репозиториев. Социальная сеть для разработчиков.

    Вы работаете с Git локально, а затем отправляете (push) свой код на GitHub, чтобы сохранить его в облаке или показать коллегам.

    Удаленная работа

    Чтобы связать ваш локальный проект с GitHub:

  • Создайте пустой репозиторий на сайте GitHub.
  • Свяжите его с вашей папкой командой git remote add origin <ссылка>.
  • Отправьте код командой git push -u origin main.
  • Теперь ваш код доступен из любой точки мира.

    Ветвление: Безопасные эксперименты

    Представьте, что у вас есть работающий сайт. Вам нужно добавить новую сложную функцию, например, темную тему. Если вы начнете менять код прямо в основной папке, сайт может перестать работать для пользователей, пока вы не закончите.

    Решение — ветки (branches).

    Вы создаете копию текущего состояния:

    Теперь вы в параллельной реальности dark-theme. Вы можете ломать здесь всё что угодно — основная ветка main останется нетронутой. Когда вы закончите и протестируете новую тему, вы вернетесь в главную ветку и выполните слияние (merge):

    Git автоматически перенесет все ваши изменения из ветки dark-theme в main.

    Развертывание (Deployment): Выход в свет

    Ваш код лежит на GitHub. Но пользователи не умеют читать код, им нужен работающий сайт, который открывается по ссылке. Процесс переноса приложения на публичный сервер называется деплоем (от англ. deploy — развертывание).

    Типы хостинга

    Выбор способа деплоя зависит от того, какой у вас проект.

    #### 1. Статические сайты (Только HTML, CSS, JS)

    Если у вас нет сложного бэкенда и базы данных (или вы используете внешние API), всё очень просто. Вам нужно просто место, где будут лежать ваши файлы.

    Популярные сервисы: * GitHub Pages: Бесплатно и интегрировано прямо в GitHub. Идеально для портфолио. * Netlify / Vercel: Современные платформы, которые дают больше возможностей (автоматическое сжатие картинок, быстрые CDN).

    Как это работает: Вы просто подключаете свой репозиторий GitHub к сервису. Каждый раз, когда вы делаете git push, сервис сам скачивает новый код и обновляет сайт за пару минут.

    #### 2. Полноценные приложения (Backend + Database)

    Если у вас есть сервер на Node.js, Python или PHP и база данных, вам нужен более серьезный хостинг. Обычный хостинг файлов тут не подойдет, так как серверный код должен выполняться, а не просто отдаваться как текст.

    Варианты: * PaaS (Platform as a Service): Heroku, Render, Railway. Вы загружаете код, а сервис сам настраивает сервер, устанавливает зависимости и запускает базу данных. Это проще всего для новичков. * VPS (Virtual Private Server): DigitalOcean, AWS EC2, Timeweb Cloud. Вы арендуете «пустой» виртуальный компьютер (обычно на Linux). Вам придется самим устанавливать всё ПО, настраивать безопасность и базы данных через консоль. Это сложнее, но дает полный контроль.

    Переменные окружения

    Важный момент безопасности. В коде вашего приложения часто есть секретные данные: пароли от базы данных, ключи API, секретные токены.

    Никогда не сохраняйте пароли в Git! Если вы отправите файл с паролем на GitHub, его смогут украсть боты за считанные секунды.

    Для этого используются переменные окружения (Environment Variables). В коде вы пишете не сам пароль, а ссылку на него:

    А само значение superSecret123 вы задаете в настройках хостинга (Heroku, Vercel) в специальном защищенном разделе.

    CI/CD: Автоматизация рутины

    В профессиональной разработке процесс деплоя автоматизирован до предела. Это называется CI/CD (Continuous Integration / Continuous Delivery — Непрерывная интеграция и доставка).

    Как это выглядит:

  • Разработчик делает git push.
  • Специальный робот (например, GitHub Actions) видит изменения.
  • Робот запускает тесты (проверяет, не сломался ли код).
  • Если тесты прошли, робот сам отправляет код на сервер и перезапускает приложение.
  • Это позволяет обновлять сайты по 10 раз в день без риска что-то забыть или сломать вручную.

    Полный цикл разработки

    Теперь, когда мы изучили все этапы, давайте взглянем на полную картину того, что мы освоили в этом курсе:

  • Идея и Дизайн: Понимание того, что мы строим.
  • Frontend (HTML/CSS): Создание визуальной оболочки.
  • Frontend Logic (JS): Оживление интерфейса.
  • Backend (API): Обработка запросов и бизнес-логика.
  • Database (SQL): Надежное хранение данных.
  • Git: Сохранение истории и командная работа.
  • Deployment: Публикация проекта в интернете.
  • !Схема полного цикла разработки программного обеспечения (DevOps Loop), демонстрирующая непрерывность процесса от планирования до мониторинга работающего приложения.

    Заключение

    Вы прошли путь от «Hello World» до понимания архитектуры сложных систем. Программирование — это не просто знание синтаксиса, это умение решать проблемы и объединять разные инструменты в единый механизм.

    Инструменты, которые мы разобрали сегодня — Git и платформы для деплоя — станут вашими ежедневными спутниками. Не бойтесь экспериментировать, создавайте свои репозитории, ломайте и чините код. Теперь у вас есть «машина времени» Git, так что ошибки вам не страшны.

    Удачи в создании ваших собственных веб-проектов! Мир ждет ваших идей.