Веб-разработка 10 лет назад и сейчас: что я бы сказал себе-джуниору
Мой первый продакшен-деплой выглядел так: FileZilla, папка public_html и молитва. Сейчас код попадает на сервер после пайплайна из тестов и сборки Docker-образа. Вот что за это время изменилось, а что осталось ровно таким же.
Azamat AbduyaminovОснователь, ведущий инженер
Около 2015 года я правил сайт прямо на сервере. Открывал файл в FileZilla, менял строчку в PHP, сохранял и обновлял страницу в браузере. Если появлялся белый экран, значит я забыл точку с запятой. Резервной копии не было. Git был, но «для серьёзных проектов».
Сейчас я руковожу маленькой студией в Ташкенте, и наш последний крупный проект, сайт юридической фирмы Enlawyer, уходит в продакшен только после того, как GitLab CI соберёт образ и прогонит проверки. Между этими двумя точками десять лет, и мне захотелось разобрать, что из них реально важно.
Как это выглядело тогда
Типичный проект середины 2010-х у меня: PHP, MySQL, jQuery, Bootstrap 3 и куча плагинов, скачанных с какого-то сайта с архивами. Вёрстка в одном файле стилей на 4000 строк. Форма обратной связи через mail(), которая половину писем отправляла в спам.
Самое странное, что это работало. Клиенты получали сайты, сайты открывались. Просто каждое изменение было маленькой лотереей.
- 2015jQuery, PHP без фреймворка, деплой через FTP, база правится в phpMyAdmin
- 2017Появляется Composer, первые фреймворки, Git уже не только «для серьёзных»
- 2019Vue и React вытесняют jQuery, SPA везде, а с ними и проблемы с SEO
- 2021Tezda Sotaman на Yii2, Docker для локальной разработки
- 2023Nuxt 3 и Django, CI/CD на каждом проекте, SSR по умолчанию
- 2025Next.js и React 19, TypeScript везде, ИИ-ассистенты в редакторе
Tezda Sotaman: Yii2 в 2021 году
Tezda Sotaman — доска объявлений: продажа и аренда жилья, стройка, гостиницы. Мы делали её в 2021–2022 годах на PHP Yii2 (шаблон advanced: отдельные frontend, backend и api), MySQL и с Telegram-ботом на Python рядом.

Сейчас я бы выбрал другой стек, но не потому, что Yii2 плохой. Он предсказуемый, у него отличный генератор кода, и маркетплейс на нём работает. Проблема в другом: в 2021-м уже было тяжело найти в Ташкенте молодого разработчика, который хотел бы писать на Yii2. Все учили React и Python. Стек выбирают не только под задачу, но и под рынок людей, которые будут его поддерживать через три года.
Это был первый урок, который я бы передал себе-джуниору: технология, которую ты выбираешь, становится чьей-то работой потом.
Что поменялось по-настоящему
Если убрать моду, крупных изменений я насчитал четыре.
| Тогда (≈2015) | Сейчас (2025) | |
|---|---|---|
| Деплой | FTP, руками, в пятницу вечером | Docker-образ, GitLab CI, откат одной командой |
| Фронтенд | jQuery и кусочки HTML с сервера | Next.js / Nuxt с SSR, компоненты |
| Типы | «Посмотрим в рантайме» | TypeScript на фронте, type hints в Python |
| Окружение | «У меня работает» | docker compose, одинаковый для всех |
| SEO | Мета-теги вручную | Sitemap, structured data, hreflang из кода |
Docker и CI убрали страх деплоя
Это главное. Раньше релиз был событием. Сейчас на Enlawyer деплой выглядит примерно так:
deploy:
stage: deploy
script:
- docker compose pull
- docker compose up -d --remove-orphans
only:
- main
Ничего хитрого. Но эти пять строк значат, что любой член команды может выкатить изменение, и сервер не превращается в музей ручных правок.
SSR вернул нас к серверу, только умнее
Забавный круг. В 2015-м HTML рендерил PHP на сервере. Потом все ушли в SPA, где поисковик видел пустую страницу с <div id="app">. Потом пришли Nuxt и Next.js и снова стали рендерить на сервере, но уже с компонентами и гидрацией. Для наших клиентов это важно: юридическая фирма, телеканал или клиника получают клиентов из Google, и пустая страница для робота им не подходит.
Хостинг и SSL
В 2015-м сайт жил на виртуальном хостинге с cPanel, рядом с сотней чужих сайтов. Если сосед ловил вирус, страдали все. SSL-сертификат стоил денег, поэтому половина сайтов в Узнете работала по голому HTTP, и браузеры тогда ещё не ругались.
Сейчас почти каждый наш проект живёт на своём VPS: nginx, Docker, PostgreSQL, Redis. Сертификаты Let's Encrypt бесплатные и продлеваются сами. Мониторинг присылает сообщение в Telegram, если сайт перестал отвечать, и я узнаю об этом раньше клиента. Звучит как мелочь, но десять лет назад о падении сайта я обычно узнавал от самого клиента, и это был очень неприятный звонок.
TypeScript
Я долго сопротивлялся. Казалось, что это лишняя бюрократия. Передумал, когда в одном проекте поле price приходило с бэкенда то числом, то строкой, и мы искали баг два дня. С типами это ловится в редакторе.
ИИ в редакторе: пока без восторгов
Пишу это в августе 2025-го. ИИ-ассистенты уже у всех в команде. Они хорошо пишут шаблонный код, миграции, тесты и переводы интерфейса на узбекский, русский и английский. Мы на этом экономим часы, честно.
Но архитектуру они не придумывают. И уверенно пишут код, который выглядит правильно и ломается на краевом случае. Джуниору это опаснее, чем сеньору: сеньор видит, где ассистент соврал, джуниор нет. Я бы советовал себе молодому сначала научиться писать без ассистента, а потом брать его как ускоритель. Подробнее о том, как мы используем ИИ в студии, я позже напишу отдельно.
Что не изменилось совсем
Вот здесь самое интересное. Десять лет, сменились все инструменты, а сложные места проекта остались теми же.
Разговор с клиентом. Клиент по-прежнему приходит с фразой «нужен сайт как у них» и скриншотом из Instagram. Задача разработчика — выяснить, что на самом деле нужно бизнесу. Иногда это не сайт, а Telegram-бот. Никакой фреймворк этот разговор не заменит.
Сроки. Они всё так же срываются на последних 10% работы: переводы, контент, «а можно ещё вот это». В 2015-м я думал, что это от неопытности. Теперь понимаю, что это свойство проектов, и закладываю буфер.
Контент. Сайт без текстов и фотографий не запустить, и тексты почти всегда приходят последними. На Enlawyer три языка, EN/RU/UZ, и каждая страница существует в трёх версиях. Это больше работы, чем весь фронтенд.

Ответственность. Если сайт клиента упал ночью, звонят тебе. Docker и CI сделали это реже, но не отменили.
Что я бы сказал себе-джуниору
Без лишней философии, просто список. Я бы его распечатал и повесил над столом в 2015-м.
- Git с первого дня, даже для сайта-визитки
- Никогда не править код на продакшене руками
- Бэкапы базы делать автоматически и проверять, что они восстанавливаются
- Учить основы (HTTP, SQL, как работает браузер), а не только фреймворк года
- Читать чужой код, особенно хороший
- Записывать договорённости с клиентом письменно, хотя бы в Telegram
- Не стыдиться спрашивать, сколько стоит твоя работа
Последний пункт не про технику, но я его оставлю. Первые пару лет я брал за сайты столько, что не покрывал даже своё время. Если интересно, как сейчас складывается цена, у нас есть страница про разработку сайтов с понятными вилками.
И ещё одно. Фреймворки, которые я учил в 2015-м, почти все уже не нужны. А умение разобраться в чужой задаче и довести проект до запуска нужно ровно так же, как тогда. На это и стоит тратить время в первые годы.




