Начало 2026 года выдалось для разработчиков программного обеспечения по-настоящему воодушевляющим — coding-агенты внезапно стали достаточно хороши, чтобы отпала необходимость писать код вручную. Но затем наступил момент, когда медовый месяц закончился, а новизна ощущений исчезла. Дофаминовые всплески прекратились.
На дворе август, и усталость от этого процесса ощущается вполне отчётливо. Писать развёрнутые текстовые описания на английском для каждого изменения в кодовой базе — занятие, которое успело порядком надоесть. При этом возвращаться к написанию всего кода вручную тоже не хочется: в этой практике было достаточно рутины, от которой хотелось бы избавиться навсегда.
Тем не менее ощущается потребность в лучшем понимании и контроле над тем, что делает код. Важно быть уверенным в качестве и надёжности результата, чувствовать себя профессионалом. Отсюда — попытка найти способ совместить оба подхода.
Проблема с coding-агентами заключается в следующем:
- Не существует надёжной записи человеческого замысла. Промпты отбрасываются, и неясно, был ли код в итоге сгенерирован ИИ или нет. Теряется центральный источник, выражающий желания человека по отношению к машине, и с этим фактом стоит считаться.
- Чаты с ИИ — это императивные пошаговые инструкции, описывающие изменения в приложении, а не само приложение. Из-за этого инструкции часто повторяются, что расходует токены снова и снова на протяжении разработки. Это неэффективно.
- Значительная часть естественного языка существует по социальным, а не информационным причинам. Средняя фраза содержит крайне мало полезной информации. Писать в таком стиле для машины — обременительно.
Для решения этих проблем разрабатывается экспериментальный редактор под названием Huzzah, предлагающий альтернативную парадигму работы с LLM.
В coding-агентах промпты (а) развёрнутые, (б) императивные и (в) временные. В Huzzah промпты (а) представляют собой псевдокод, (б) декларативны и (в) сохраняются постоянно.
Проще показать на примере.
Сравнение fizz buzz
Возьмём простой пример — реализацию fizz buzz с помощью ИИ. Рассмотрим оба подхода: с coding-агентами и с Huzzah.
С coding-агентами
Открывается чат в выбранном инструменте, и вводится что-то вроде:
Создай функцию, которая выполняет цикл 100 раз. Если число делится на 3, выведи «fizz». Если число делится на 5, выведи «buzz». Если делится на оба числа (например, 15), выведи «fizz buzz».
При необходимости внести правку отправляется следующее сообщение:
Вместо цикла на 100 итераций функция должна принимать число на вход и выполнять цикл столько раз, сколько указано.
Процесс повторяется до получения устраивающего результата.
С Huzzah
Создаётся новый файл fizz_buzz.hz, в котором пишется псевдокод в произвольном стиле. Один из вариантов реализации:
fizz_buzz()
loop 100
modulo 3 ? "fizz"
5 ? "buzz"
both ? "fizz buzz" После сохранения файла Huzzah автоматически генерирует реальный код на его основе.
Для внесения изменений достаточно обновить файл:
fizz_buzz(n)
loop n
modulo 3 ? "fizz"
5 ? "buzz"
both ? "fizz buzz" При сохранении файла Huzzah фиксирует diff и использует его как промпт для LLM. Затронутый исходный код регенерируется автоматически.
Другие примеры
Для более полного представления о возможностях подхода — ещё несколько примеров.
1. Корзина покупок
list cart
list inventory
mock_data = // include some mock data
init()
inventory.fill(mock_data)
add_item(id)
cart.add(item by id)
remove_item(id)
cart.filter(item by id)
checkout()
return cart.sum(item by price) and format as price 2. Список задач
Todo {
id: int
text: str
completed: bool
}
add_todo(text)
todos.add(text, completed = false)
toggle_todo(id)
todo = todos.get by id
todo.completed = NOT .completed
remove_todo(id)
todos.filter by id Преимущества
Некоторые плюсы заметны сразу. Псевдокод получается заметно более лаконичным и читаемым по сравнению с развёрнутыми текстовыми промптами. Есть и другие:
- Написание промптов в таком стиле вовлекает мышление разработчика — ощущение больше похоже на проектирование структуры кода.
- Псевдокод можно писать настолько лаконично или подробно, насколько удобно.
- Псевдокод сам по себе служит документацией, поскольку написан человеком для выражения собственного замысла.
- Можно написать язык-независимый псевдокод и использовать его как основу для нескольких целевых языков или окружений. Речь идёт о сложных алгоритмах — например, CRDT.
Оговорки
Серебряной пули, разумеется, не существует. Есть ряд исключений:
- Вполне вероятны проблемы с этим подходом при масштабировании.
- Метод очевидно больше подходит для новых кодовых баз, чем для существующих.
- При отсутствии экспертизы в предметной области естественный язык, вероятно, остаётся более простым способом взаимодействия.
- Некоторые вещи сложнее надёжно выразить — например, зависимости между файлами.
- Функции в духе LSP были бы недоступны (хотя теоретически их тоже можно было бы сгенерировать).
Текущее состояние
Huzzah активно разрабатывается и пока существует лишь в экспериментальном виде. Исходный код и инструкции по установке доступны на GitHub.
Please give it a spin and let me know what you think! Cheers.