Разработка программного обеспечения есть сложный процесс взаимодействия множества сущностей: специалистов в разных областях (от непосредственно написания кода до управления), средств разработки (от языков программирования и IDE до багтрекеров и систем хранения знаний) и артефактов (таски, логи, отчёты, планы и тп). Отношения этих сущностей описываются, объясняются и регулируются парадигмами различной степени абстрактности. Одни, например, носят сугубо прикладной характер. Другие созданы искусственно ради красивого акронима, что, впрочем, не отменяет их практической ценности. Третьи таковы, что о самом факте их использования мы начинаем догадываться только ближе к начислению годовой премии.

Но прогресс вносит свои коррективы, и в разработке ПО появляется новая сущность — так называемый «искусственный интеллект». Что же это такое? Это точно не язык программирования и не фреймворк, но это уже и не инструмент (в привычном нам понимании). В то же время, это ещё далеко не полноценный коллега. Поэтому возникает потребность в осмыслении роли этой новой сущности, способов и целей её использования.

В этой статье, обобщив известный мне опыт, я предлагаю вниманию сообщества концепцию ПРОСТА. Данная концепция ставит своей целью описание роли искусственного интеллекта в процессе разработки программного обеспечения и состоит из шести принципов:

  1. Промпт — первым приоритетом! Значимость промпта; промпт как основа любой работы с ИИ

  2. Разбор результата и рефлексия. Необходимость обратной связи между ИИ и "внешним миром"

  3. Однозначность и определённость. Детерминированность ответа ИИ входными параметрами

  4. Самостоятельность сотрудника. Изменение роли человека с появлением ИИ; восприятие и позиционирование ИИ

  5. Творчество и тактика. Выбор и постановка задач для ИИ

  6. Амбициозность апгрейда. Технический прогресс как фактор планирования

Рассмотрим каждый из этих принципов подробнее.

Примечание 1. В этой статье под ИИ я подразумеваю, в первую очередь, различные генеративные модели, построенные на их основе агенты и сопутствующее ПО, но, впрочем, не исключаю и другие значения.

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

П: Промпт — первым приоритетом!

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

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

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

Требуется обновить картинки в проекте? Как жаль что дизайнер занят. Или он потерял PSD c исходниками (ведь дизайнеры не умеют пользоваться системами контроля версий)? Пусть промпт к text-to-image модели станет исходником картинки. Тогда перекрасить или чуть-чуть изменить картинку можно будет редактированием текстового файла.

Принцип «Промпт — первым приоритетом!» говорит о значимости роли промпта в любом процессе, для которого применим ИИ.

Р: Разбор результата и рефлексия

ИИ должен иметь доступ к результатам своей деятельности.

Давайте проведём небольшой эксперимент. Откройте самый простой текстовый редактор, какой у вас есть, и попробуйте написать что-то более-менее комплексное на своём любимом языке программирования. Например, напишите разворот двусвязного списка. Сложновато, правда? Не хватает автокомплита, лога компиляции, подсветки синтаксиса и всего того, к чему мы привыкли в IDE. Наверняка вы, даже если не допустите концептуальных ошибок, забудете какую-нибудь синтаксическую мелочь или правильное название метода. Что уж говорить о реализации функциональности, размазанной по десяткам файлов! Вряд ли кому-то под силу написать её без ошибок с первого раза.

Так почему же мы требуем от ИИ сразу выдавать работающий код? «Смотрите, какой глупый этот ваш чатбот! Вместо substring он написал substr! Такое даже не компилируется!» А что, если чатбот сам запустит javac и посмотрит результат его работы? Сумеет ли он тогда найти ошибку?

Пусть ИИ получит доступ ко всей той информации, к которой имеет доступ «мясной» программист: логам компиляции, вориннгам линтеров, автокомплиту, навигации по коду и прочим «человеческим» инструментам (обобщённо всё это можно знавать «внешним миром»). Столкнувшись с ошибкой, пусть он пытается её исправить. Пусть он пишет тесты и добивается их выполнения. Пусть запускает написанные приложения и открывает свёрстанные странички в браузере. Словом, работает так же, как работает «мясной» программист.

Принцип «Рефлексия над результатом» указывает на то, что ИИ-генерация это не единичное обращение в духе вопрос-ответ, а продолжительное обсуждение с «внешним миром» результатов работы ИИ.

О: Однозначность и определённость

Ответ ИИ должен однозначно определяться промптом и только им.

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

Если вдруг кому-то становится неловко от термина «промпт», то в него можно включить не только собственно текст, но и название модели, её ревизию, зерно генерации и другие необходимые параметры. Мы говорим «промпт», а подразумеваем «всё множество параметров».

В то же время, если что-то изменится во «внешнем мире», например из SDK будет удалён устаревший метод, и это изменило лог компиляции, модель должна прореагировать на это. Сигналы из «внешнего мира», согласно принципу «Разбор результатов и рефлексия», это тоже часть параметров.

Принцип «Однозначность и определённость» гарантирует, что для любого запроса ИИ с одними и теми же параметрами и одним и там же состоянием «внешнего мира» результат будет постоянным. Результат ИИ-генерации изменится только если мы изменим параметры.

С: Самостоятельность сотрудника

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

Многие начинающие руководители попадают в ловушку страха делегирования. «Я сделаю лучше», «Я сделаю быстрее», «Долго объяснять», — говорят они. В итоге «руководитель» вместо своих задач решает задачи своих подчинённых. Способна ли такая система к масштабированию, при условии что в сутках всё ещё 24 часа, а у начинающего руководителя всё ещё только две руки?

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

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

Нужно не бояться делегировать свои задачи ИИ, давать ИИ новые роли и объединять несколько ИИ в производственные цепочки. Это вовсе не означает, что ИИ полностью вас заменит. Но правильное использовании ИИ изменит круг решаемых задач. Программист, грамотно использующий ИИ, превратится в своего рода «тимлида», дизайнер — в «арт-директора», а копирайтер — в «главного редактора».

Принцип «Самостоятельность сотрудника» описывает то, как «мясному» сотруднику следует воспринимать ИИ: больше, чем просто инструмент, скорее как подчинённого или целый отдел в своём подчинении.

Т: Творчество и тактика

Работайте с ИИ так, словно он способен творить, оценивать ситуацию и принимать тактические решения.

Способен ли ИИ творить на самом деле — вопрос холливарный даже в части определения термина «творчества». Лично я уверен, что ни «мыслить», ни «творить» модели не способны. Они лишь изображают этот процесс с некоторой степенью подобия. Даже не изображают, а только оперируют векторами и матрицами огромной размерности. Категорией «мыслит или не мыслит» эти вектора наделяется нашим «мясным» разум. Но для решения прикладных задач такого поведения может быть вполне достаточно. Как говорил Владимир Ханин, «Творцы нам тут не нужны».

Существует большая разница между использованием инструмента и работой с людьми. Например, у нас есть задача найти знахаря с лошадиной фамилией.

Инструменту мы даём максимально формализованную задачу. Делая выборку из БД, мы явно указываем что, откуда и как мы выбираем:

SELECT
	last_name, first_name
FROM
	doctors
WHERE
		last_name LIKE ‘Копытин’
	OR
		last_name LIKE ‘Тройкин’

Работая с человеком, мы можем (и должны, иначе зачем нам люди!) ставить более общие задачи: «Пошли депешу знахарю с лошадиной фамилией». Человек, если он достаточно мотивирован, начнёт перебирать возможные фамилии и делать запрос по каждой из них.

Так же мы поставим задачу ИИ:

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

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

Принцип «Творчество и тактика» призывает ставить ИИ более абстрактные, допускающие некоторую свободу принятия решений, задачи.

А: Амбициозность апгрейда

Возможности ИИ растут экспоненциально

Нашему «мясному» сознанию трудно вообразить экспоненту, слишком она велика. Пример тому — легенда о зёрнах на шахматной доске.

Вчера DeepDream генерировала спагетти с пёсьими головами. Сегодня Veo 3 снимает вполне правдоподобные ролики про домашних животных. Завтра, скорее всего, мы будем в пару кликов создавать уникальные фильмы на вечер (если быстрее не переселимся в капсулы с LCL).

Производительность и качество моделей растёт экспоненциально, как растёт и производительность железа. Если в текущий момент использовать ИИ вам кажется нерациональным (слишком дорого, слишком долго, недостаточное качество и тд и тп), то это не повод отказываться от его использования в перспективе. Уже сейчас стоит начать создавать инструменты, писать интеграции и собирать метрики (разумеется, с использованием изложенных выше принципов!), чтобы всё было готово к моменту появления подходящих моделей и подходящего железа.

Принцип «Амбициозность апгрейда» уверяет нас, что задачи, которые вчера были недоступны для ИИ, завтра станут тривиальными.

Заключение

Практическое использование ИИ это уже не вопрос «стоит ли?» Это вопрос «как?» Мы, «мясные» айти-специалисты, должны быть готовы к переменам, которые уже начинаются. Часть этой подготовки это создание концепций, парадигм и принципов новой работы. В этой статье я постарался внести свой вклад, предложив концепцию ПРОСТА. Надеюсь, это поможет ПРОСТА использовать ИИ уже сейчас!

ЗЫ Да, акроним ПРОСТА придуман ИИ. Нет, принципы, входящие в концепцию, я вывел из личного опыта и опыта моих коллег (тех, которые «мясные»).

ЗЗЫ В этой статье я 44 раза написал «ИИ». Ой, уже 45.

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


  1. danslapman
    29.06.2025 12:24

    Знаю, что заминусут, но
    ПРОСТА SOSAL GOVNO


    1. pnmv
      29.06.2025 12:24

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


  1. Emelian
    29.06.2025 12:24

    Промпт
    Однозначность
    Самостоятельность
    Творчество
    Амбициозность

    Откуда эта страсть к рассуждениям «вообще» и нежелание давать конкретные примеры? Разве этот «метод» технологичен? – Однозначно, нет!

    Хорошо. Рассмотрим первый пункт. Разве промпт это главное? – Нет, конечно? Человек хочет «хорошее» решение своей задачи, а нейросеть устроит любое, первое попавшееся ей на «глаза». Человек объясняет, я имел в виду не это, а то. Сеть отвечает, ладно, на тебе «другое». Человек смотрит, оно не работает или работает, но неправильно. И так может продолжаться довольно долго.

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

    Остальные пункты это вообще ни о чём. Либо из разряда «Капитан «Очевидность»». Даже повода «потрындеть» не дают… :)


    1. ilichme Автор
      29.06.2025 12:24

      Человек хочет «хорошее» решение своей задачи, а нейросеть устроит любое, первое попавшееся ей на «глаза».

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

      Я могу привести пример из своей практики, когда разраб ругал Retroift https://square.github.io/retrofit/ за то, что из коробки нет возможности отследить количество загруженных байт. Его представления о "качестве" требовали полного контроля над процессом загрузки. Ему, конечно же, удалось написать костыль, который этот прогресс отслеживал. Но это совсм не вязалось с понятием "качества" продукта в целом. Во-первых его костыль размывал границу между слоями архитектуры, делая код ну максимально жёстким. Во-вторых это было просто-напросто не нужно. В 99,99% запросов нам не важно, сколько байт было принято и отправлено.

      Если мы дадим нейронке общую задачу, то получим такое же общее решение. А чтобы ответ был "качественным", надо описывать критерии "качества". Об этом, в числе прочего, принцип "Рефлексия над результатом". Задача пользователя нейронки (как и задача руководителя!) поставить нейронку (подчинённого) в условия, когда она будет делать то, что требуется.

      Цель использования ИИ это, в том числе, снижение доли ручного труда. Вы же не будете отрицать, что писать на языке высокого уровня удобнее, чем на ассемблере? ИИ позволит (в будущем) подняться нам на ещё один уровень выше. Статья - это предложение варинта того, как в этому подготовиться.


      1. Emelian
        29.06.2025 12:24

        Вы говорите так, словно не видели как происходит разработка в команде.

        Не поверите, не видел! Всегда ваял программы в гордом одиночестве. Те, что по работе, кормили меня двадцать лет. Правда, мои друзья программисты работали в паре. Их работу я видел, и, хотя я предлагал им работать втроем, но, тем не менее, был рад, что они отказались. Просто, командная работа, это не моё.

        Я могу привести пример из своей практики

        Я тоже могу. Вот, недавно просил нейросеть решить задачу:

        1. Дана бинарная матрица пикселей одной строки символов. Все символы могут быть разделены по криволинейному контуру. Можно ли написать скрипт на Питоне, который расщепляет эти символы и сохраняет их пиксели в текстовом виде?

        Однако сеть выдала мне громоздкое решение на OpenCV. С ней я дела иметь не хотел, поэтому, уточнил задачу:

        1. Мне нужно ограничиться только библиотекой PIL. С ее помощью я уже получил бинарную матрицу Pixels, с помощью функции Image.load(). Разделительные контуры, между символами текстовой строки, нужно строить «вручную», используя факт того, что сечения символов, вдоль базовой линии шрифта, после сглаживания символов, однозначно разделяют эти символы.

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

        Короче, плюнул я на него и наваял собственный скрипт, который уже расщепляет все символы. Осталось дело за «малым», распознать их. Раньше я добивался этого для конкретного шрифта, используя точечные метрики его символов, в своей программе на C++/WTL. Теперь хочу воспользоваться протяженными метриками, в Питоне. Какие-то из них, очевидно, сработают, какие-то, возможно, неочевидно. Объяснять все эти нюансы нейросети, как-то, влом. Проще выполнить работу самому. Как в поговорке: «Хочешь сделать работу хорошо – сделай ее сам!».

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

        Не буду! Поскольку писал на ассемблере тоже ( https://erfaren.narod.ru – еще тогда, когда Донбасс был в составе Украины).

        ИИ позволит (в будущем) подняться нам на ещё один уровень выше. Статья - это предложение варианта того, как в этому подготовиться.

        А что тут «готовиться»? ИИ-сервисы надо использовать, при всех их «детских болезнях». Уже сейчас они, кое в чем, заметно помогают, даже бесплатные ресурсы (платными я не пользуюсь в принципе). Как говорится: «Работайте братья! – Работаем, брат!».


    1. pnmv
      29.06.2025 12:24

      Даже точно зная, что нужно и как именно это должно выглядеть, а также придумав все правильные слова, можно не получить правильно работающую программу, строк на тридцать, и за половину рабочего дня (пинал codellama).


  1. JuryPol
    29.06.2025 12:24

    Практическое использование ИИ это уже не вопрос «стоит ли?» Это вопрос «как?» Мы, «мясные» айти-специалисты, должны быть готовы к переменам, которые уже начинаются.

    Не могу не отметить, что 146% статей, написанных ИИ-кликушами, подозрительно совпадают с действиями жуликов, которые разводят население на деньги по телефону. В любом описании схем их работы говорится, что первое, что предпринимают жулики, создание у жертвы дефицита времени на осмысленную реакцию. «Скорей-скорей», «срочно», «сейчас на вас уже оформляют кредит»...

    Для айтишников с учетом специфики используется адресная подстройка про «последний вагон», про «ссылка на скачку будет действительна только 24 часа!». Ощущение, что статьи про ИИ ломанулся писать народ вообще без И...


    1. ilichme Автор
      29.06.2025 12:24

      Вы абсолютно правы, я просто забыл приложить ссылку на свой оналйн-курс.


    1. ilichme Автор
      29.06.2025 12:24

      А если серьёзно я тоже был настроен скептически (втирается в доверие, опять маркетинговая уловка!), пока сам не начал использовать ИИ. Например одна известная IDE может искать по проекту просто по текстовому описанию или даже по скриншоту. Раньше, когда куа приносили багу, я вручную искал соотетствующее место в проекте, расставляя отладочные выводы и прочее. Сейчас я далею запрос на обычному русском языке, и, о чудо, он находит нужно место в сотни раз быстрее меня.

      Название IDE специально не пишу, чтобы вы меня не обвинили в инфоцыганстве ещё раз.


  1. Sunrise_735
    29.06.2025 12:24

    А кто-нибудь хотя бы раз показал код реального продукта (не типового проекта из гайдов), который был бы написан LLM, без существенной переработки людьми? Я пока такого не видел.


  1. ALexKud
    29.06.2025 12:24

    Работал с. Deepseek по sqlite. Была проблема неработающим запросом записи данных insert c ON Conflict. Был создан уникальный индекс, но не работало. ИИ зациклился, выдавая одно и тоже и мантру должно работать. Помог старый добрый stack overflow. Оказывается если нет условия WHERE то его надо добавить типа where true. Ошибка парсинга запроса в sqlite при отсутствии where. Так что бесполезен в этом случае оказался этот ИИ. Простая задача такой облом. Даже как справочник не справился. Вот вам и лошадиная фамилия - Овсов.