Кто-то кайфует от новых возможностей и говорит, что теперь всё будет делаться с AI. Кто-то называет ерундой, говорит AI ничего не может, и придумывает таким разработчикам клички типа “Саша GPT”. Кто-то готовится к обороне кода как Егор Бугаенко (@yegor256) в своём видео “Как защитить код от AI”: https://www.youtube.com/watch?v=GPJ-LfRpxM4 (очень рекомендую посмотреть)

На какой стороне вы? Новаторов или староверов?

Делюсь своим видением происходящего, с какими плюсами и ограничениями столкнулся на практике.


Начнём с признания факта, что AI (он же LLM, что более правильно) пока ещё не интеллект, а система просчитывающая вероятность появления тех или иных слов/символов (токенов) вслед за промптом. Упрощая, LLM — это продвинутый “бредо-генератор” или более привычный автокомплит. И с такой точкой зрения исчезают завышенные ожидания. Когда автокомплит выдал не тот результат, что хотел разработчик, это хоть и досадно, но нет злобы. И сложно найти разработчика, который сказал бы, что автокомплит в IDE — это какое-то зло.

Понизив градус страстей можем двигаться к практическим результатам. В чём AI уже хорош?

В чём AI уже хорош

Первое: Работа по образцам!

Будь то рефакторинг кода или генерация интеграции ещё одной API. Имея подробное описание и образец AI отлично справляется с работой. 

Немного цифр на примерах.

1) Большой старый проект написанный на Symfony. Сотни энтитей. Имеет технический долг в виде не описанных типов данных элементов коллекций. В результате: нет автокомплита, затруднён поиск использования методов энтитей (нет поиска по юзу, только поиск по тексту), PHPStan плохо понимает с чем имеет дело. Итого имеем: замедляется разработка и рефакторинг, повышается риск сломать существующую функциональность. Оценка затрат на исправление: примерно 3 дня.

Пробуем исправить с AI. Как раз в тот момент внедряли использование Cursor. Описание правил для коллекций и связанных с ними геттеров и сеттеров, с экспериментами заняло минут 40. Дальше сохраняем правило в проекте и пришем промпт: “Найди все doctrine-энтити в проекте и исправь согласно правил, описанных в проекте”. Пошли сделали кофе, пока работала AI. Несколько раз дошлифовывали описание и перезапускали. Это заняло ещё около часа.

Итог: 2 часа против 3-х дней работы. И побочный эффект - готовое описание коллекций для AI, за которыми дальше он будет следить самостоятельно каждый раз, когда работает с коллекциями. Что дальше ещё больше ускорит разработку.

2) Есть у меня проект TODO Registrar, позволяющий создавать тикеты в тикет-трекинговых системах типа JIRA из TODO-шек в коде. Занимаюсь им в свободное время. За несколько вечеров с AI было сделано:

  • переход на компоненты Symfony вместо ручной сборки сервисов для упрощения развития

  • интеграция с несколькими новыми трекинговыми системами (по образцу имеющихся)

  • расширенная валидация настроек, получаемых от пользователя при запуске, с подсказками

  • создал GitHub Action (https://github.com/marketplace/actions/todo-registrar) для облегчения интеграции моего решения

  • переработал документацию и закрыл много мелких ишьюсов.

Старый подход когда нужно разбираться с новой API, искать и сравнивать библиотеки, разбираться в их работе и только потом писать код — это заняло бы минимум месяц, с учётом работы только по вечерам. И сравнивая стоимость подписки 20$ в месяц со стоимостью рабочего часа — это мега выгодное решение.

Второе: Прототипирование и старт проекта

Необходимо было реализовать несколько плагинов к osTicket для службы поддержки. Под эту систему раньше никто в компании не разрабатывал. 

Например, нужно было ни много ни мало автоматизировать назначение ответственного отдела по контенту обращения. Заголовок и основной текст обращения, и прикреплённые файлы в различных форматах. Какие-то можно распарсить, какие-то нужно распознавать. Во сколько оцените эту работу? Этот плагин с динамическими настройками, интеграцией API для использования AI и контейнеризацией был сделан за день. Следующий по образцу был собран за пару часов.

Третье: Вёрстка

У вас есть макет в Figma? Отлично. Сделает вёрстку для web или Flatter на ура! Тут цифр под рукой нет, но коллеги делились результатом с круглыми глазами.

Четвёртое: Изучение проекта и документирование.

Документация — это боль и несбыточная мечта многих проектов. Как быть тем, кто недавно пришёл на проект? Особенно QA и BA. Тут AI может много рассказать про ваш код: последовательность вызовов, проверки и многое другое. И если хотите, то может создать документацию. Например, может заполнить QA-notes в тиките.

Ограничения

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

Первое: Каков проект таков и результат

AI будет придерживаться стиля проекта. Если ваш проект с легаси, не явными вызовами и запутанной логикой, то и сгенерированный код будет такой же. Или AI вовсе запутается и выдаст бред. За то на хорошо построенных проектах код выдаёт весьма приличный.

Второе: Короткая память

Кода вы что-то делаете, то через день или неделю помните контекст. AI же помнит только в рамках сессии. Дальше как человек с болезнью мозга — поспал и забывает. И каждый раз нужно “вводить в курс дела”, т.к. он уже ничего не помнит о вашем проекте.

Третье: Малое контекстное окно

Большие проекты AI не может проглотить целиком. Только по частям. И вам нужно привыкнуть “держать в узде” модель с помощью уточнения контекста работы, чтобы модель не потеряла фокус внимания и не запуталась. И не пытайтесь делать задачи одну за другой в одном диалоговом окне — для неё слишком много информации. Одна задача — одно диалоговое окно. Потратьте немного токенов на рассказ ей о проекте заново — так она лучше держит фокус внимания и выдаёт лучше результат.

Четвёртое: Распухший код и копипаста

AI склонен нагородить кучу if-ов там где можно применить одну стандартную функцию. И если одна и та же логика используется в 2-х местах и с минимальными отличиями, то он дублирует код вместо того, чтобы вынести дублирующийся код в отдельную процедуру. В итоге, во время ревью порой приходится выкидывать две трети сгенерированного кода,чтобы сделать его лучше поддерживаемым.

Какие есть решения проблем?

Первое: Создание образцов

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

Второе: Контекстная подгрузка документации

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

Когда работаешь с фичей `А`, то учитывай инструкции из файла `docs/features/a.md`

Можно создать отдельный документ со списком фич проекта и ссылками на документации по ним. Тогда AI будет подгружать только требуемые документы.  Это экономит контекстное окно и использование токенов.

Третье: выделение терминов

Порой (часто) полезно бывает подсказать LLM, что часть промпта — это термин, тогда она лучше понимает что именно нужно сделать, в какой части проекта и какую документацию нужно подгрузить динамически. Это может быть точный термин на английском, когда промпт написан на русском или кавычки. Сама LLM часто использует одинарные обратные кавычки — вы тоже так можете.

Четвёртое: MSP

MCP — это не только сторонние сервисы, их можно запускать локально в виде докер-контейнеров. И последних полезных:

  • atlassian - для подключения к JIRA и Confluence

  • serena - позволяет представить код в виде векторной базы данных с которой может общаться AI вместо прямого анализа кода, что экономит использование токенов.

Экспериментируйте. Буду рад, если поделитесь своими находками в комментариях.

Пятое: автоматизируйте проверку кода

Надеюсь у вас в проекте уже используются утилиты для проверки качества кода. Можно попросить AI запускать их после внесения изменений.

После создания и изменения кода выполняй команды:

  • PHP CS Fixer: `composer cs-fix -- --show-progress=none`

  • PHPStan: `composer phpstan`

  • PHPUnit: `composer test-all`

И модель может использовать их output для внесения правок ещё до того, как отдаст результат вам на ревью.

Видение будущего

У многих появились переживания по поводу будущего программистов. Мол, всех программистов заменят дешёвой AI. Переживания не беспочвенные, но как по мне переоцененные. Да, IA сильно удешевляет разработку, но я бы не переживал за программистов.

Во-первых, далеко не всё может решить AI. Особенно в больших и старых проектах с легаси. Хорошие инженеры всё так же нужны.

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

Другими словами, ожидается не столько падение зарплат отдельных специалистов, сколько кардинальное удешевление разработки для бизнеса за счёт того, что с новыми инструментами программист будет больше успевать в единицу времени.

Конечно же поменяется структура команд. Я уже вижу команды, которые сознательно отказываются от BA, перекладывая значительную часть работы BA на AI. Не хочу умалять заслуги BA — действительно хорошие, понимающие тонкости бизнеса и особенности разработки, приносят огромную пользу. Однако встречаются не так часто, как хотелось бы, и в новых реалиях в продуктовых командах BA превращается в секретаря между IT и бизнесом и оформителя тикетов. В то время как за счёт прямой коммуникации разработчиков с бизнесом улучшается понимание требований разработчиками и ускоряется выдача на продакшен MVP фич.

Тут же маячит упрощение и ускорение разработки различных Open Source решений и увеличение конкуренции между ними. Нет драйвера под твою систему, но есть под похожую? Вечер с IA и у тебя есть драйвер. Нет подходящей библиотеки для API, но есть документация по API? Не беда. Начальный вариант можно сгенерировать достаточно просто.

С удешевлением IT упрощается создание проектов-клонов. Это большой риск для бизнеса и тянет увеличение маркетинговых затрат и юридического сопровождения. Тут же рядом удешевление создания экспериментальных продуктов для захода в новые ниши. Это, в свою очередь, ведёт к росту потребности в автоматизации процессов, мульти-платформенных решений, анализа всего и вся, чтобы точнее сегментировать аудиторию и попадать ей в сердце. Это заставляет развиваться соответствующие рынки.

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

Комментарии (15)


  1. mmMike
    29.12.2025 09:11

    Интересно.. найдется хоть одна LLM которая сможет написать корректный и красивый код на такую задачу

    "Создай функцию на входе которой целое число в 32 бита. Функция находит первый бит равный 0 при проходе справа на лево (от минимально значащего) и инвертирует найденный 0-й бит. А затем инвертирует все биты равные 1 справа от этого найденного бита. Функция возвращает преобразованное число".

    Конечно задача специально утрирована. Но на практике, от бизнеса очень похожие задачи валятся (конечно не про биты).


    1. Aeliot Автор
      29.12.2025 09:11

      Каждому инструменту своё место. Конечно, создавать программу пилотируемого полёта в космос никто не подпустит ИИ и на пушечный выстрел. При этом тонны более простых задач из разряда "побелить-покрасить" уже можно успешно спихивать на неё.


      1. mmMike
        29.12.2025 09:11

        Вы не поняли.
        Это задача, которая сводится к решению

        unsigned int foo222(unsigned int v) {
        return v+1
        }

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

        Почему то все сводят работу разработчика ПО просто к тупому кодированию...


        1. Aeliot Автор
          29.12.2025 09:11

          Я то как раз понял. Не усложняйте)

          Не забывайте, что программисты работают с разными языками и в разных отрослях. Есть позиции на которых разработчики решают действительно сложные вещи. Правда на сколько они массовы?

          Если смотреть на статистику. Подавляющее большинство web-решений реализованио на php. И подавляющее большинство их разработчиков почти не сталкиваются с математикой сложнее 3-4 классов. Ну максимум когда-то встретятся с консинусами для рассчёта ближайшего расстояния. Спросите когда они последний раз работали с матрицами или чето-то подобным... Что далеко ходить - спросите их хотябы про побитовые операторы (bitwise). Сколько из них работает с ними? И сколько вообще поймёт про что это... Это не бином Ньютона. Возьмём фронтенд на JS - та же ситуация, только там всё ещё примитивнее.

          И кстати, ниже @blackyblack приводит ответ от ChatGPT. Не то ли решение, которое вы хотели видеть?


    1. blackyblack
      29.12.2025 09:11

      Ну так инструментами пользоваться нужно уметь:

      https://chatgpt.com/s/t_6953937f54448191ad3085751243fb86

      Итого: функция = x + 1 (по модулю 2^32)

      C/C++

      Важно: для signed int32_t переполнение — UB, поэтому делайте через uint32_t:

      #include <stdint.h>

      uint32_t f(uint32_t x) {

      return x + 1u; // работает как нужно

      }

      Если вход именно int32_t, то безопасно так:

      int32_t f(int32_t x) {

      return (int32_t)((uint32_t)x + 1u);

      }


  1. R0uT3r
    29.12.2025 09:11

    Тут же маячит упрощение и ускорение разработки различных Open Source решений и увеличение конкуренции между ними. Нет драйвера под твою систему, но есть под похожую? Вечер с IA и у тебя есть драйвер.

    Ага, а потом при запуске приложения у тебя система падает из-за того, что нейронка галлюнов словила и допустила ошибку в драйвере. Ещё и уязвимостей туда напихала, так что доступ к твоей системе есть у всех соседей.

    Не понимаю о какой конкуренции идёт речь? Той самой, где ситуация сравнима с TikTok/Shorts, где полно нейрослопа? Или о той конкуренции, где некоторые личности пишут программы с утечками памяти, благодаря иишке? Или о конкуренции, где ситуация как с curl, когда им кидают миллион баг-репортов об уязвимостях, которые иишка нагаллюцинировала при анализе кода? Конкуренция "Кто больше заспамит нейрослоп-репортами"?

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


    1. Aeliot Автор
      29.12.2025 09:11

      Конечно же не панацея. Не было такого в статье. Гибче нужно быть)) Если систему ложит, то списать на "нешмагла" и ждать когда сделают специалисты лучше разбирающиеся в вопросе. И свои усилия приложить там, где получается с пользой. Действительно может и голючионировать, плохой код выдава - об этом прямо написано в статье.

      Что же до конкуренции, то "да" - будет много либ, компонентов и пр. созданных/перепаботанных ИИ, которые своей массой будут скрывать решения с хорошей архитектурой и высокой надёжностью. В том числе и ваши/мои. И это будет создавать проблемы как при поиске действительно стоящих, так и продвижении разрабатываемых.


  1. MEGA_Nexus
    29.12.2025 09:11

    Вайбкодинг. Сопротивляться или возглавить?

    Скорее обойти стороной, чтобы не вляпаться.


    1. Aeliot Автор
      29.12.2025 09:11

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


  1. GrandTourism
    29.12.2025 09:11

    Я считаю эти слова "Новатор или старовер" пассивной агрессией и бескрайним неуважением к профессии.


    1. Aeliot Автор
      29.12.2025 09:11

      Спасибо за наброс) Кто-нибудь ещё подраскрутит вентилятор))


  1. little-brother
    29.12.2025 09:11

    >>Третье: Вёрстка
    У меня нет фигмы, но есть DeepSeek - вот в чем он откровенно слаб, так это верстка (особенно если делать flexbox-ами, а не медиа-запросами). Если к верстке нужно прикрепить пару js-функций с resizeObserver, то все - пиши пропало.
    Вот типы ts - пишет кажется неплохо (я ts даже не читал - все скармливаю ему, он пишет).
    Также неплохо формулировки для интерфейса пишет.


    1. Aeliot Автор
      29.12.2025 09:11

      Спасибо за информацию по DeepSeek! Кому-то может быть полезно с чем он справляется лучше.


  1. action52champion
    29.12.2025 09:11

    1) Большой старый проект написанный на Symfony. Сотни энтитей. Имеет технический долг в виде не описанных типов данных элементов коллекций. В результате: нет автокомплита, затруднён поиск использования методов энтитей (нет поиска по юзу, только поиск по тексту), PHPStan плохо понимает с чем имеет дело. Итого имеем: замедляется разработка и рефакторинг, повышается риск сломать существующую функциональность. Оценка затрат на исправление: примерно 3 дня.

    Пробуем исправить с AI. Как раз в тот момент внедряли использование Cursor. Описание правил для коллекций и связанных с ними геттеров и сеттеров, с экспериментами заняло минут 40. Дальше сохраняем правило в проекте и пришем промпт: “Найди все doctrine-энтити в проекте и исправь согласно правил, описанных в проекте”. Пошли сделали кофе, пока работала AI. Несколько раз дошлифовывали описание и перезапускали. Это заняло ещё около часа.

    Итог: 2 часа против 3-х дней работы. И побочный эффект - готовое описание коллекций для AI, за которыми дальше он будет следить самостоятельно каждый раз, когда работает с коллекциями. Что дальше ещё больше ускорит разработку.

    А были еще удачные примеры применения на легаси проекте с симфонией?


    1. Dr10s
      29.12.2025 09:11

      Повысить тест каверейдж до которого не доходят руки: Написать пару функциональных тестов и сказать "возьми эти тесты за пример и покрой тестами энпдоинты а,б,с"