Упрощаем работу с рутиной или как стать Гендальфом Белым

от автора

Предисловие

Надеюсь, все смотрели «Властелин колец»: там был харизматичный волшебник Гэндальф. В начале фильма (и книги) к его имени добавляли «Серый», а затем его стали величать «Белым». Так вот, это обозначение его ранга в иерархии магов. Можно уже открыть форточку для проветривания. Чтобы поменять статус, требуется преодолеть нечеловеческие испытания и обрести просветление. Так и в IT: пройдя все невзгоды, ты становишься сеньором. А сегодня я постараюсь облегчить вам этот путь.

Конец эпохи «Человек-Бэтмен»

Помните то время, когда фронтендер был эдаким универсальным солдатом? Сам сверстал пиксель-перфект, сам написал редьюсеры на Redux, сам починил конфиг Webpack, а ночью во сне продолжал верстать письма для почтового клиента Outlook 2007? У меня для вас новость: эта эпоха стремительно уходит в прошлое.

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

Сразу расставим точки над «i»: это не история о том, как роботы отобрали у нас работу. Это история о том, как мы перестаем быть теми, кто печатает код, и становимся теми, кто принимает решения. Мы пересаживаемся с весла на капитанский мостик. И это, скажу я вам, чертовски удобно.

Кто есть кто в этом зоопарке? (Ликбез для тех, кто хочет блеснуть на созвоне)

Прежде чем хвататься за клавиатуру и просить ИИ написать нам «Тиндер для котиков», давайте разберёмся, что вообще происходит «под капотом». Нам, фронтендерам, не нужно уметь собирать нейронку локально, но понимать, чем трансформер отличается от диффузии, полезно, хотя бы для того, чтобы определять, кому какую задачу делегировать.

Академическая база (за 30 секунд, не уснете):

С точки зрения архитектуры, современные ИИ делятся по двум главным осям:

  1. По архитектуре «мозга»:

    • Трансформеры (Transformers): Это основа всего текстового и кодового волшебства (GPT, Claude, Gemini). Их секретный соус — механизм внимания (Attention). В отличие от старых моделей, которые читали код как школьник стих — слово за словом и забывая начало к концу, Трансформер видит весь ваш useEffect на 500 строк целиком. Он понимает, что стейт, объявленный на 10-й строке, используется в разметке на 450-й. Именно поэтому они так хороши в рефакторинге и поиске багов.

    • Диффузионные модели (Diffusion Models): Это художники (Midjourney, Stable Diffusion). Они работают как скульпторы, убирающие лишний мрамор. Только вместо мрамора — цифровой шум. Они берут хаос и постепенно «проявляют» из него иконку, кнопку или целый макет. Полезно, когда нужно сгенерить заглушку для блога.

    • CNN / RNN: Это динозавры, слава Богу, почти вымершие в потребительском сегменте. RNN страдали склерозом и забывали, что было в начале длинного промпта. Забудьте о них, как о jQuery в 2026 году.

  2. По способностям восприятия (Модальность):

    • Unimodal: Работает только с текстом (ранние версии чат-ботов).

    • Multimodal: Понимает текст + картинку + код + аудио (GPT-4o, Claude 3.5/3.7). Вот это наше всё. Мы можем скинуть скриншот кривого макета из Figma и сказать: «Сделай мне такой же компонент на Tailwind». И он сделает. Потому что он видит.

Группировка для фронтендера (Перевод с академического на наш, кухонный язык):

Теперь забудем теорию и посмотрим на полку с инструментами, которыми мы пользуемся каждый день.

Погоняло в окопах

Кто это? (Примеры)

Фронтенд-роль

Оракул в облаке

ChatGPT, Claude.ai, Gemini

Сеньор-консультант на аутсорсе. Генерирует архитектуру фичи, читает документацию вместо тебя, объясняет легаси-код, написанный три года назад.

Шёпот в ухо (Автодополнение)

GitHub Copilot, Codeium, Cursor Tab

Вёрсткий печатник-стахановец. Знает твой проект до последней строчки. 70% бойлерплейта (импорты, объявления useState, повторяющиеся className) стучит по клавишам он.

Генератор пикселей

v0.dev, Builder.io, Screenshot-to-code

Верстальщик-стажер с бешеной скоростью. Из картинки или текста делает компонент на React/Vue. Быстро, но иногда такой кривой, что проще переделать самому. Но для MVP — идеально.

Груз ответственности за скуку (или «Совещание по поводу сдвига пикселя в 18:30»)

Фронтенд — уникальная профессия. Мы одновременно художники, создающие то, что видит миллион пользователей, и археологи, раскапывающие артефакты в папке node_modules. И часто бывает так: ты пришел на работу с горящими глазами, чтобы запилить крутую анимацию на Canvas или разобраться с Web Workers, а в итоге…

…тебя съедает болото рутины:

  1. Проклятие прокидывания пропсов (Prop Drilling). Это как быть почтальоном в небоскребе без лифта. Пропс пришел сверху, и его надо протащить через 5 абсолютно пустых и бессмысленных компонентов-оберток до какой-то несчастной кнопки в подвале интерфейса. Да, есть сторы и Context API, но легаси-код, как мы знаем, бессмертен.

  2. Бой с тенью сборщика. Ты просто хочешь импортировать обычный SVG файл. А сборщик (Webpack/Vite) отвечает тебе как капризная жена: «Неееет, дорогой, сначала установи vite-plugin-svgr, потом создай custom.d.ts, потом трижды перезапусти дев-сервер, и может быть, я покажу тебе твою иконку. А если нет — я упаду с ошибкой, в которой 300 строк красного текста, а суть в одной опечатке в пути».

  3. Работа машинистки-стенографистки. Писать 35-й по счету const [value, setValue] = useState(») и 27-й обработчик const handleChange = (e) => {…}. Пальцы устают не от сложной бизнес-логики, а от монотонного стука по одним и тем же клавишам. Ты чувствуешь себя не творцом, а биороботом по перекладыванию JSON’ов.

  4. Экзистенциальный ужас нейминга. Как назвать функцию, которая проверяет, что массив не пустой и при этом не null или undefined? isArrayNotEmptyAndNotNil? hasValidItemsAndExists? На эти споры с самим собой уходит больше ментальной энергии, чем на написание самой проверки в одну строчку.

И вот тут в дверь стучится Искусственный Интеллект, берет у тебя из рук клавиатуру и говорит: «Слушай, отдохни, сходи за кофе. Я тут постучу пока по кнопкам, а ты потом проверишь, чтобы я не накосячил с margin и padding».

Генерация верстки (из картинки / промпта): Инструкция для ленивого перфекциониста

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

Сценарий №1. «Горе-дизайнер из WhatsApp».
Тебе скинули не ссылку на Figma, не Zeplin, а скриншот экрана. Кривой, обрезанный, сделанный на старом Android.

  • Твой ход: Выделяешь область скриншота (Win+Shift+S / Cmd+Shift+4).

  • Куда идти: Открываешь Claude.ai (на сегодняшний день он лучше всех считывает структуру интерфейсов с изображений).

  • Священный текст промпта: «Привет. На прикрепленной картинке форма логина. Сделай мне React компонент на TypeScript. Стили — Tailwind CSS. Темная тема. Обрати внимание: кнопка с градиентом как на скрине, в инпутах должны быть иконки слева. Вся верстка в одном файле. Поехали».

  • Итог: Ты получаешь 90% готового кода за 15 секунд. Остается только поправить «робо-стиль». Нейросети патологически любят ставить гигантские отступы p-8 там, где должен быть скромный p-4, и пихать rounded-full на всё, что видят. Но это лечится за минуту правок.

Сценарий №2. «Хочу как у них».
Увидел крутой компонент на Dribbble, Awwwards или на сайте конкурента. Руки чешутся повторить.

  • Инструмент: v0.dev от Vercel. Это буквально генератор фронтенда по промпту с упором на Tailwind и shadcn/ui.

  • Промпт: «Сделай навигационную панель: логотип слева, аватарка пользователя справа, по центру 4 ссылки (Главная, Услуги, Блог, Контакты). При скролле вниз панель должна становиться полупрозрачной с эффектом блюра и немного уменьшаться по высоте. Используй стек Next.js и shadcn/ui».

  • Юмор ситуации: v0 выдаст тебе компонент с CSS-правилами backdrop-filter: blur(12px) и transform: scale(0.98), о существовании которых ты благополучно забыл после прочтения спецификации W3C в 2021 году. Ты с умным видом пушишь это в репозиторий, а коллеги на код-ревью пишут: «Вася, респект, анимация огонь! Как делал?». А Вася скромно умалчивает, что просто хорошо общается с роботом.

Магия, которую не стыдно показать

Заменим скучные примеры на что-то реально хитрое.

Кейс: Drag-and-Drop без библиотек (потому что 30 кб в бандле — это святое).
Нам нужно сделать перетаскивание виджетов на дашборде. Тащить ради этого монстра react-beautiful-dnd не хочется. Хочется легкое, нативное решение на чистом React.

  • Что делаешь: Открываешь компонент в IDE, ставишь курсор и пишешь комментарий (Copilot или Cursor его тут же подхватят):
    // напиши кастомный хук useDraggable для React, который обрабатывает mouse events, вычисляет дельту смещения и возвращает стили для transform: translate3d. Без библиотек, чистый JS. Не забудь убрать слушатели при размонтировании.

  • Что делает ИИ (и тебе не надо это писать самому):

    1. Создает useRef для отслеживания координат.

    2. Правильно считает математику: clientX — initialMouseX.

    3. Самое важное — корректно описывает cleanup-функцию с removeEventListener, чтобы твой компонент не устраивал утечек памяти.

    4. Выдает готовый кусок кода, который тебе пришлось бы собирать по 3 разным статьям на Medium и одному ответу на StackOverflow 2014 года.

Решение проблем с билдом или кодом: Экзорцизм красных ошибок

Назовем этот блок, как он того заслуживает.

Раньше: Ты запускаешь npm run dev, терминал взрывается красным текстом. «Error: Cannot find module ‘./SomeLegacyFile’…». Ты вздыхаешь, завариваешь кружку чая побольше и готовишься к 40 минутам серфинга по заброшенным веткам issues на GitHub, где ответом является одна фраза: «Пофиксите в следующем релизе (3 года назад)».

Сейчас (алгоритм экзорциста):

  1. Не паниковать и копировать всё. Выделяешь весь лог ошибки. Не только красную строчку Error, а всю простыню стектрейса до самого верха. В ней зашита причина.

  2. Формулировка контекста. Идешь в ChatGPT/Claude и пишешь:
    «Я фронтендер. Стек: Vite + React + TypeScript. При запуске npm run dev получаю такую ошибку: [ВСТАВЛЯЕШЬ ВЕСЬ ЛОГ]. В чем корень проблемы и как это починить пошагово?»

  3. Результат. В 8 случаях из 10 нейросеть ткнет носом в несовместимость версий @types/node и Node.js, или скажет: «Чувак, у тебя в 12-й строке tsconfig.json слеш не в ту сторону в алиасе paths».

Бонус для тех, кто хочет не просто чинить, а понимать: можно попросить объяснить природу ошибки. «Почему Webpack ругается на fs в браузере?». Это как иметь под боком сеньора, которому не лень объяснять теорию.

Как выжить, когда бэкендер в отпуске (и выглядеть при этом богом SQL)

Самый страшный сон фронтендера: тебе нужно построить сложный график аналитики, а готового API нет. Либо бэкенд уехал в Тибет, либо ты делаешь админку на Next.js и у тебя прямой доступ к Supabase/PostgreSQL.

Инструкция по выживанию и имитации бурной деятельности:

  1. Осознание. Ты открываешь схему БД и видишь таблицы users, events, transactions. Тебе нужно посчитать количество регистраций по дням за последний месяц, причем если в какой-то день было 0 регистраций, день всё равно должен быть в выдаче с цифрой 0 (чтобы график в Recharts не был рваным).

  2. Диалог с ИИ-сисадмином. Пишешь промпт на чистом русском языке:
    «У меня есть таблица users с полем created_at (тип timestamp). Напиши запрос для PostgreSQL. Нужно посчитать количество пользователей, созданных за каждый день за последние 30 дней. В выборке должны быть ВСЕ дни (даже с нулями). Результат отсортируй по дате по возрастанию. Мне это нужно скормить в фронтовый график».

  3. Магия. ИИ генерирует тебе эльфийское заклинание — рекурсивный CTE (WITH RECURSIVE) с LEFT JOIN. Ты смотришь на этот код, понимаешь от силы половину слов, но копируешь его в await sql(…) внутри Server Action.

  4. Триумф. Данные приходят идеально ровные. Приезжает бэкендер из отпуска, смотрит в код и спрашивает: «Ого, ты SQL подтянул? Да еще и WITH RECURSIVE…». А ты с лицом Брэда Питта отвечаешь: «А чё там подтягивать-то? Делов на пять минут». (Внутри в этот момент играет победный марш, а благодарность Claude зашкаливает).

Тесты и Документация (Как откосить и получить похвалу за чистый код)

Часть 1. Документация (JSDoc и Storybook).
Никто не любит описывать пропсы. Особенно когда их 25 штук у сложной таблицы.

  • Инструкция:

    1. Установи плагин Mintlify в VSCode или открой проект в Cursor.

    2. Выделяешь глазами тип MyComponentProps.

    3. Жмешь Cmd/Ctrl + . -> Generate JSDoc.

    4. Вжух — и у каждого пропса есть описание. «@param data — Массив данных для таблицы. @param isLoading — Показывать скелетон». Ты не написал ни строчки текста, а на код-ревью тебя хвалят за документацию.

Часть 2. Тесты (Jest + React Testing Library).
Писать тесты — полезно. Писать их руками — скучно.

  • Инструкция:

    1. Открываешь файл LoginForm.tsx.

    2. В чат с Copilot пишешь: напиши юнит тесты для компонента LoginForm. Проверь рендер двух полей ввода и кнопки, проверь, что кнопка disabled если поля пустые, и проверь вызов функции onSubmit с правильными значениями при клике.

    3. Копируешь результат в LoginForm.test.tsx.

    4. Запускаешь. С первого раза тесты упадут (где-то селектор getByRole не тот, где-то act нужен). Но! Ты потратишь 3 минуты на правку селекторов, а не 20 минут на написание каркаса. Это как купить замороженную пиццу: основа готова, осталось добавить колбаски по вкусу.

Чего ИИ пока НЕ умеет (И не просите его об этом)

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

  1. Понимание контекста бизнеса. ИИ не знает, что вот этот маленький баг с отсутствием отступа у кнопки «Купить» на мобилке обрушит конверсию на 20% и приведет к разносу от продактов. Он просто видит код. Приоритизировать задачи и решать, что именно важно для бизнеса, — по-прежнему твоя работа.

  2. Визуальная эстетика уровня «Apple».
    Сгенерировать сетку из 4 карточек с тенями — это легко. Сделать так, чтобы интерфейс дышал, имел ритм, чтобы взгляд пользователя интуитивно скользил туда, куда нужно, — это всё еще магия, доступная только живому человеку с насмотренностью. ИИ генерирует шаблоны.

  3. Ответственность и софт-скиллы.
    ИИ не пойдет на митинг объяснять, почему вместо кнопки «Отправить» на проде внезапно нарисовалась гигантская кошка (спасибо кривому промпту). ИИ не напишет постмортем в Confluence. И уж точно не сможет сказать заказчику: «Нет, мы не будем делать всплывающее окно через 3 секунды после захода на сайт, потому что это бесит пользователей».

  4. Рефакторинг «говнокода столетней давности».
    Если у вас проект на Angular.js 1.5 с примесью jQuery и парой самописных скриптов на Prototype, ИИ предложит вам красивое, современное решение, которое с вероятностью 99% просто положит весь скоуп $digest и уронит приложение к чертям. Легаси нужно трогать только проверенными шаманскими бубнами и молитвами.

Ты дирижер, а не пианист

Подводя черту под этим парадом технологий, честно говоря, хочется выдохнуть. Искусственный интеллект во фронтенде сегодня — это как завести дома очень умного, но слегка безумного кота. Он может случайно нажать хвостом кнопку Deploy to Production, пока ты наливаешь чай (спасибо, что в Next.js есть защита от дурака). Но этот же кот ловит всех мышей в подвале (рутину) и греет тебе колени, пока ты думаешь над архитектурой нового модуля.

Мы вступаем в эру, где скорость принятия решений и качество промпта ценятся выше, чем слепая скорость печати (P. S. я всё ещё быстрее печатаю, чем Copilot генерирует длинные листинги, так что безработным не останусь).

ИИ не отберет у нас работу. Он отберет у нас самую нудную её часть — бесконечные марафоны по написанию handleChange и копанию в конфигах. А нам оставит самое интересное: споры о том, чей фреймворк лучше, UX-исследования и возможность смотреть на сгенерированный код с чувством легкого собственного превосходства.

И помните: если что-то сломалось, всегда можно сказать: «Это не я, это робот накосячил». Робот не обидится. Пока что.

ссылка на оригинал статьи https://habr.com/ru/articles/1023966/