Webrium
Подписаться

ИИ в редакторе: что реально ускорилось

Почему ассистент ускоряет набор кода, но не сроки задачи: как посчитать свой выигрыш по закону Амдала и когда вычитка подсказок его съедает

Сетка часов рабочего дня: закрашена лишь малая часть ячеек — набор кода, который ускорил ассистент; соседний счётчик показывает, что общий срок задачи не изменисрок задачи тот же

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

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

Куда уходит день

Возьмите последнюю законченную задачу и прикиньте, сколько в ней вышло часов от «взялся» до «сделано». Разложите эти часы на кучки:

  • набор нового кода — руки на клавиатуре, вы производите текст, которого раньше не существовало;
  • чтение — чужой код, свой старый, документация, логи;
  • обдумывание — что вообще строить и как;
  • отладка;
  • ожидание — сборки, тесты, ревью, деплой;
  • коммуникация — тикеты, обсуждения, созвоны.

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

Долю часов набора обозначьте f. Она пойдёт во все формулы дальше.

Арифметика узкого места

По устройству ассистент в редакторе ускоряет производство текста: подсказка в момент набора, чат, генерация куска по описанию. Пусть на кучке набора он даёт ускорение в k раз. Тогда время задачи:

T_новое = T × (f/k + (1 − f))

а ускорение всей работы:

S = 1 / (f/k + 1 − f)

Это закон Амдала, и первое следствие неприятно для любого демо: даже если k уходит в бесконечность, суммарное ускорение упирается в потолок 1/(1 − f). Производитель показывает k. Ваша неделя живёт в 1 − f.

При этом k — не свойство инструмента, а свойство пары «инструмент и ваш код»: в бойлерплете он высокий, в вашем доменном — неизвестно. Честный способ узнать один — часы в кучках до и после, о них в конце.

Отсюда уже видно, почему «день ускорился» и «тикет не сдвинулся» не противоречат друг другу. Ощущение скорости рождается в кучке набора; срок задачи держат остальные кучки. И заметьте, каких кучек формула вообще не касается: ожидание и коммуникация не делятся на k — ассистент их не трогает.

Цена проверки

Генерация мгновенна и бесплатна. Проверка — нет: она ваша, она последовательна и не распараллеливается. У каждой принятой подсказки есть баланс:

выигрыш = t_набора − t_вычитки − t_правок − t_переключения

t_набора — сколько вы печатали бы это сами. t_вычитки — сколько читаете и подтверждаете. t_правок — сколько чините после. t_переключения — цена выхода из режима «сочиняю» в режим «ревьюю»: это разные виды внимания, и переход между ними не бесплатен.

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

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

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

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

Тупик: делегировать максимум

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

Почему это не работает, видно из уже написанных формул, механизм за механизмом.

Первый: принятия концентрируются там, где модель уверена, — в бойлерплейте и коде известной формы. А там f крошечная. Вы максимизируете k на кучке, которая почти не входит в сумму; по закону Амдала общий срок от этого почти не двигается. Сгенерированного текста больше, знаменатель стоит.

Второй: вместе с объёмом генерации линейно растёт объём проверки, а проверка — ваша, последовательная и не делится на k. Делегируя больше, вы переносите работу из кучки, которую инструмент ускоряет, в кучку, которую не ускоряет никто. В пределе вы перестаёте быть автором и становитесь ревьюером чужого пул-реквеста — а ревью кода без спецификации в голове, как видно из прошлого раздела, самая дорогая вычитка из возможных. Баланс уходит в минус задолго до предела.

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

Та же ловушка, но крупнее: сравнить в трекере скорость задач «с ИИ» и «без ИИ». Инструмент первым берут те, кто и так быстрее всех, и берут его на лёгкие задачи — смещение выбора съедает сравнение целиком.

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

Что ускорилось, а что — нет

Теперь по кучкам, честно.

Ускорилось — там, где спецификация у вас уже есть, а набор длинный:

  • Код известной формы: тесты к только что написанному модулю (поведение вы сами только что определили), миграции, конфиги, одноразовые скрипты. Вычитка — сравнение со свежей спецификацией.
  • Механика по многим файлам: переименование с последствиями, правка вызовов после смены сигнатуры. Раньше — sed и молитва; теперь — предложение, которое всё равно надо вычитать, но ожидаемый диф известен заранее.
  • Перевод между форматами: запрос в код, JSON в типы, прототип с одного языка на другой.
  • Навигация по незнакомому репозиторию: чат с контекстом кода отвечает «где это обрабатывается» быстрее цепочки поисков. С оговоркой: ответ проверять переходом к файлу — модель уверенно называет похожее на правильное.
  • Черновики текстов вокруг кода: описание задачи, комментарий к пул-реквесту, README к модулю. Тоже текст известной формы.
  • Микротрение: имена, импорты, сигнатуры. Экономия тут не в секундах набора, а в переключении внимания: вы не отрываете взгляд от кода, чтобы вспомнить точное имя типа. В формулу это не лезет, к вечеру — реально.

Не ускорилось — то, где узкое место не в производстве текста:

  • Решение, что строить. Это суждение; правдоподобный вариант дизайна модель выдаёт с той же уверенностью, что и абсурдный.
  • Отладка живых систем. Узкое место — информация, которой у вас ещё нет: логи, воспроизведение, состояние продакшна. Модель этого состояния не видит; её гипотезы — частые причины из общего опыта, у всех с одинаковой уверенностью в голосе. Как генератор чек-листа гипотез — полезно, как оракул — вредно.
  • Глубина ревью. Суждение о чужом коде не ускоряется производством текста — ни вашего, ни модельного.

Закономерность простая: чем ближе кучка к «набору нового кода известной формы», тем больше выигрыш. Чем ближе к суждению — тем ближе к нулю или минусу.

Как проверить на себе

Один вечер: разложите по кучкам часы последней большой задачи — это «до». Через месяц с ассистентом — то же самое, это «после». Сравнивать не строки, а часы в кучках. Если сдвиг есть, на такой грубости он виден; точнее для решения «оставлять или нет» не требуется. Автоматическая метрика, если совсем хочется, — время цикла задачи целиком, от открытия до продакшна: шумная, но хотя бы измеряет то, что нужно, а не то, что легко считать.

Позиция редакции

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

Мы ошибаемся — и позиция неверна — при одном условии: если проверка уйдёт внутрь инструмента. Модель сама прогонит тесты, сама поправит, сама закроет цикл правок — и дорогой член суммы, человеческая t_вычитки, исчезнет. Спор о том, кого называть ИИ-агентом, — ровно спор об этом: владеет ли инструмент циклом проверки или только генерацией; мы разбирали его отдельно. Останется экономическое условие: цикл самопроверки жжёт инференс, и сходится ли это по деньгам, зависит от его цены на вашей нагрузке — этому у нас посвящён отдельный разбор.

Пока этого не случилось, ответ на вопрос «помогает ли ИИ в программировании» — арифметический, а не лозунговый. Смотрите на свою f и на свою цену проверки: они у вас свои, и это единственные числа, которые здесь что-то весят.

С чем это связано

Метка над заголовком говорит, зачем туда идти: продолжить тему, перейти к практике или увидеть возражение.

Поле, разделённое швом: слева ассистент, который лишь отвечает текстом, справа агент, который сам выполняет действия; элементы пересекают границу, показывая, чтАссистент отвечаетАгент делает
Спор

Что такое ИИ-агент и почему о нём все спорят

А если самое интересное в ИИ — не скорость? Ассистент отвечает, агент — делает, и настоящий спор не об уме модели, а о том, что ошибка становится действием.

Счёт за инференс, разогнанный повторами вызовов, растёт и пробивает порог бюджета, зажигая сигнал тревогисчёт с повторамимесяц
Усиление

Сколько стоит инференс: считаем до счёта, а не после

Ускорение — полдела; осталось посчитать, во что оно обходится. Модель расчёта инференса можно заполнить своими числами за час, а главный множитель в ней — не размер модели, а доля повторов.

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

Терминал, который экономит часы, а не минуты

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

Письмо по вторникам

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

Начните вводить — материалы появятся здесь.

выбрать · Enter открыть · Esc закрыть