Программирование голосом: код, ревью, коммиты

Программирование голосом — руки разработчика и микрофон над клавиатурой

«Программирование голосом» обычно звучит как клоунада. Видео из 2017-го, где разработчик кричит «open paren if foo equals equals null close paren» — это мем, а не workflow. Я тоже долго думал, что эта идея мертва.

Commander Flow поменял мою точку зрения. Не потому что добавил какой-то магический режим «диктовки кода». А потому что код — это не только код. Код — это коммиты, тикеты, code-review, документация, комментарии, имена, чаты с коллегами. И всё это вокруг кода — теперь у меня голосом.

Где голос реально меняет жизнь разработчика

Самая частая моя голосовая операция — это сообщения коммитов. Ставлю курсор в git commit -m "...", зажимаю клавишу, говорю что-то вроде «починил race condition в отмене пайплайна, корректно отменяем токен при повторном нажатии хоткея», и в терминал прилетает готовое сообщение по conventional commits, потому что я один раз голосом задал правила — и они запомнились.

Описания PR почти такие же, только длиннее. Открываю шаблон GitHub-PR, диктую как объяснил бы джуну — что меняется, зачем, что не трогаем, как проверять. Через несколько секунд получаю аккуратный markdown с заголовками ## Context, ## Changes, ## Test plan. Раньше на это уходило минут пять, сейчас — секунды.

Главное, что для меня перевернулось — это code-review комментарии. Я раньше ленился писать развёрнутые ревью: слишком много печати ради чего-то, что почитают и забудут. Сейчас выделяю строку, голосом надиктовываю мысль, получаю чёткий полированный комментарий буквально за пару секунд. Мои ревью стали значительно длиннее и заметно полезнее, и команда это видит.

Отдельной строкой — документация. Самая болезненная часть профессии. Я диктую docstring как объяснил бы коллеге, и Commander Flow приводит это к стилю XML-doc, TSDoc или markdown — в зависимости от языка проекта. Документация перестала быть налогом, который я плачу к коду.

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

Режим code-comments: отдельная вещь, которую я люблю

CODE-COMMENTS · ЧТО ОН ДЕЛАЕТ Не трогает идентификаторы латиницей Subscription.IsActive, BillingService, Span<T> Сохраняет термины в исходном написании kubectl, async/await, useEffect, OAuth Не добавляет вежливые обороты никаких «уважаемые читатели» в комментах Корректно работает с двумя алфавитами «проверяем что Subscription.IsActive»
Без явной голосовой команды «как код-комментарий» любая LLM иногда «облагораживает» технический комментарий до состояния прозы.

Поэтому я просто говорю голосом «оставь как код-комментарий» — и Commander Flow:

  • Не трогает идентификаторы латиницей (variable names, class names)
  • Сохраняет термины (kubectl, async/await, useEffect, OAuth) в исходном написании
  • Не добавляет «лишние» вежливые обороты (всё равно никто не пишет «уважаемые читатели» в комментариях к коду)
  • Корректно работает с обоими алфавитами в одном комментарии: // проверяем, что Subscription.IsActive перед вызовом BillingService.Refresh

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

Словарь терминов — недооценённая фича

В PolishOptions.Dictionary я закидываю собственные термины и аббревиатуры. У меня там:

  • kubectl, helm, argocd, flux
  • IDictionary, IAsyncEnumerable, Span<T>
  • ConfigureAwait(false) (целиком, как фраза — чтобы LLM не переписывал)
  • Аббревиатуры компании, имена внутренних сервисов

После этого LLM перестаёт «улучшать» специфичные термины, оставляя их ровно как я их назвал.

Сценарий, который меня убеждает каждый день

ПРАВИЛЬНАЯ ПРОПОРЦИЯ КЛАВИАТУРОЙ if (x != null && y != null) логика, имена, точные конструкции ~30% времени в IDE ГОЛОСОМ // объяснение зачем эта проверка коммиты, PR, ревью, доки, чаты ~70% «вокруг кода»
Логика — руками. Всё человеческое вокруг логики — голосом.

10:30, я в IDE, рядом телега команды, рядом Linear с тикетом. Я держу хоткей и говорю:

«Вынес ретрай-логику в отдельный класс RetryPolicy с экспоненциальным бэкоффом, добавил тесты, проверь дополнительно sequence diagram в тикете перед мерджем»

Это уходит в Linear как комментарий к тикету. Дальше — Alt+Tab в Slack, тот же хоткей:

«команда, я закинул PR на ревью, не блокирующее но желательно сегодня»

В Slack-стиле, со строчных букв, без «уважаемые коллеги». Дальше — обратно в IDE.

Три действия в трёх приложениях, всё голосом, никаких пальцев.

Где я споткнулся

Punctuation в коде, который попадает между диктовкой. Если я диктую блок «вот эта функция возвращает Task<bool>», иногда LLM «думает» что Task<bool> — это HTML и пытается экранировать. Решено добавлением термина в словарь, но первое время удивляло.

Конфликты хоткеев с IDE. У моей IDE свои горячие клавиши. Хоткей Commander Flow пришлось пару раз переназначить, чтобы не конфликтовал. Сейчас он у меня на Caps Lock — самой удобной и редко используемой клавише. Маленькое неудобство, решилось одним кликом в настройках.

Самые тяжёлые режимы могут «соображать» чуть медленнее в IDE. Для имейла лишние миллисекунды не заметны. Для комментария к коду «здесь и сейчас» — заметны. Я переключился на средний режим для рабочего ноутбука и оставил самый мощный для десктопа с дискретной видеокартой. Латентность пропала.

Что я понял про звук как интерфейс программирования

Голос не заменяет клавиатуру в IDE. Он дополняет её там, где клавиатура была худшим инструментом. Печатать if (x != null && y != null) — клавиатура. Объяснять, почему эта проверка тут нужна — голос.

Между этими двумя задачами — пропасть когнитивной нагрузки, и они не одинаково «решаются печатью». Я перестал заставлять себя печатать второй вид задач. Стало легче.

Что я взял из этой пропорции

Программирование голосом — это не «диктовка кода». Это сдвиг того, что именно ты делаешь голосом. Логику пишешь руками, всё человеческое вокруг логики — голосом.

За десять лет в профессии я не находил пропорции удобнее.

Попробуй сам

Скачай Commander Flow и зажми Caps Lock в любом приложении. Распознавание идёт локально, без облака — бесплатный пробный период.

Скачать бесплатно

Похожие истории

Все статьи