Митчелл Хашимото: «Я отношусь к ИИ-инструментам как к начинающим разработчикам»

Zed Industries 43,5 тыс. 1 ч 1 мин 11 мин 18.06.2025
Главное

В рамках серии сессий по агентной инженерии представитель компании Zed Industries Ричард провел детальное обсуждение практических аспектов применения больших языковых моделей с создателем HashiCorp Митчеллом Хашимото. Известный разработчик поделился уникальным опытом использования ИИ при создании своего нового высокотехнологичного эмулятора терминала Ghosty, написанного на языке Zig. В основе его подхода лежит строгое разграничение ролей, где человек выполняет функции стратегического архитектора, а нейросеть берет на себя рутинные задачи уровня младшего инженера.

🛠️ Роль архитектора: почему ИИ-агенты требуют жестких «бамперов» 2:37

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

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

Единственное исключение, где создатель HashiCorp использует полностью открытые запросы, он называет «молитвами» (Hail Mary prompts). Для этого у него настроена специальная команда в интерфейсе Claude, которая автоматически загружает текст тикета из GitHub по его номеру. В таких случаях Хашимото не просит ИИ исправить баг, поскольку не доверяет ему настолько, а лишь просит объяснить причины возникновения проблемы и указать возможный путь решения. Это позволяет ему параллельно анализировать до пяти различных багов во время триажа, категоризации и разметки тикетов.

🐛 Анатомия одного баг-фикса: функция отмены закрытия терминала в Ghosty 7:51

В качестве практического примера Митчелл Хашимото привел коммит, исправляющий ошибку в недавно добавленной функции эмулятора Ghosty — возможности отменить закрытие любого терминала, будь то сплит, вкладка или отдельное окно. Функция позволяет пользователю нажать комбинацию клавиш Command+Z (или Control+Z) в течение настраиваемого промежутка времени (около 5 секунд), после чего закрытый терминал восстанавливается со всей историей и окружением. Данный механизм изначально создавался в плотном соавторстве с ИИ.

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

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

🔄 Интерактивный цикл: ручное тестирование и автоматический рефакторинг 10:56

После того как модель выдает первый вариант кода, Хашимото переходит к стадии локальной проверки. Описываемый фрагмент относился к Swift-части приложения под macOS, а не к низкоуровневой части на языке Zig. Из-за специфической гибридной архитектуры Ghosty используемый инструмент Claude Code в настоящий момент не способен самостоятельно собирать и запускать проект, поэтому автор отключил все встроенные функции автоматического тестирования в системном промпте.

Процесс верификации изменений со стороны разработчика выглядит следующим образом:

  1. Выполнение команды diff для поверхностного анализа сгенерированного кода, чтобы убедиться в отсутствии критических аномалий или деструктивных команд вроде удаления файловой системы.
  2. Запуск компиляции в среде Xcode с помощью горячих клавиш Command+R.
  3. Мануальное тестирование исправленного поведения в интерфейсе без детального построчного изучения кода на первом этапе.

В рассматриваемом случае поверхностная проверка показала, что баг был успешно устранен, однако структура и качество кода не соответствовали стандартам Хашимото. Функция, которая изначально занимала около 30 строк, разрослась под воздействием ИИ до 200 строк, превысив размеры экрана ноутбука. Спикер отмечает, что ИИ-модели стремятся решить задачу по кратчайшей прямой траектории, не задумываясь о долгосрочной читаемости.

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

🗺️ Специфика языков: зрелость Swift против «необученности» Zig 19:30

Эффективность работы ИИ-агентов кардинально зависит от выбранного языка программирования и степени его представленности в обучающей выборке. По словам Хашимото, при работе со Swift модель демонстрирует глубокие знания устоявшихся фреймворков и генерирует качественный код. Ситуация меняется, когда дело касается новейших возможностей языка — например, анонсированных функций macOS 26 Tahoe. В таких сценариях модель оказывается бесполезной, и инженеру приходится возвращаться в «каменный век» ручного чтения документации и самостоятельного написания кода.

В отношении языка Zig, на котором написана основная часть эмулятора Ghosty, текущее поколение моделей остается некомпетентным в вопросах модификации кода. Тем не менее Хашимото обнаружил, что нейросети хорошо справляются с его чтением и логическим пониманием. На основе этого наблюдения он выработал оригинальный обходной путь:

В то же время ведущий Ричард поделился альтернативным опытом разработки компилятора языка Rock, который также пишется на Zig. По его мнению, Claude 4 Opus способен успешно писать код на Zig, если предоставить ему объемный контекст из текущей кодовой базы. Имея перед глазами массивные примеры реального синтаксиса проекта, модель начинает точно копировать локальный стиль программирования, что избавляет от необходимости промежуточного перевода на язык C. Этот факт подтверждает тезис участников о том, что продуктивность ИИ сильно привязана к конкретной программной среде и специфике проекта.

⛔ Недоступный уровень: где ИИ бессилен перед низкоуровневой оптимизацией 35:37

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

В качестве примера Хашимото привел внутреннее устройство Ghosty, где отображение экрана терминала реализовано через связанный список страниц виртуальной памяти фиксированного размера для обеспечения быстрого аллоцирования из пула. Внутри этих страниц адресация удерживается в пределах 16-битного расстояния от базового указателя. Благодаря этому вместо полноценных 64-битных указателей сохраняются лишь 16-битные смещения, что позволяет экономить колоссальный объем памяти: в физическом пространстве одного стандартного указателя умещаются четыре кастомных.

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

📸 Мультимодальный дизайн: копирование интерфейсов по скриншотам 39:19

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

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

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

📝 Феномен избыточного комментирования и ревизия кода после коммита 42:10

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

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

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

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

🧪 Экстремальный TDD и автоматизация рутинного бойлерплейта 46:20

Митчелл Хашимото является строгим приверженцем методологии разработки через тестирование (TDD). Его первое место работы в качестве младшего инженера на протяжении трех лет отличалось радикальным подходом к тестированию, где ни одна строка продуктового кода не могла быть написана до того, как будет создан падающий тест. Хотя сейчас спикер не столь категоричен, при исправлении багов он строго придерживается правила: сначала пишется воспроизводящий ошибку тест, и лишь затем создается решение для его успешного прохождения.

При этом Хашимото предпочитает писать архитектуру тестов самостоятельно, чтобы глубже понять природу бага, перекладывая на ИИ написание самого решения. Однако в вопросах создания сложного и рутинного кода для тестов (бойлерплейта) модели могут демонстрировать выдающиеся результаты. В качестве примера Хашимото привел недавний баг в Ghosty, связанный с изменением размеров окна терминала:

🧠 Развитие инженеров в эпоху генеративных моделей и борьба с контекстом 49:10

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

Освободившееся благодаря автоматизации рутины время Хашимото советует тратить на обучение и расширение кругозора. Сам он во время генерации длинных ответов моделями изучает видеоматериалы технических презентаций Apple, чтобы подготовить Ghosty к выходу новой операционной системы.

В контексте высокой интенсивности работы Хашимото отмечает, что многолетняя топ-менеджерская деятельность приучила его к эффективному переключению контекста (context switching) каждые 30 минут. При этом использование ИИ-агентов видится ему более комфортным, чем управление людьми:

Любопытно, что особенности взаимодействия с ИИ породили новые функции в самом софте. Использование инструмента Claude Code в терминале Ghosty приводило к отправке системных уведомлений macOS при завершении работы агента. Это вдохновило Ричарда добавить аналогичные уведомления в редактор Zed. В свою очередь, интенсивное тестирование этой функции Хашимото заставило его доработать логику уведомлений в Ghosty: теперь они автоматически скрываются через 3 секунды при движении мыши или вовсе не появляются, если окно терминала находится в фокусе.

📐 Изменение структуры кодовой базы под особенности моделей 56:17

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

Другим важным и укоренившимся за 10 лет методом работы Хашимото является специфический подход к проведению рефакторинга:

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

💬 Цитаты

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

Митчелл Хашимото 3:15

«Лучший способ коучинга джуниоров — дать им хорошо очерченную проблему со множеством ограничений.»

Митчелл Хашимото 8:30

«С более сложными вещами я использую очень мало агентов и возвращаюсь в каменный век ручного изучения.»

Митчелл Хашимото 20:09
👥 Спикеры
🔗 Упомянутые сайты и проекты
📖 Термины
Агентская инженерия (Agentic Engineering)
Подход в программировании, использующий автономных ИИ-агентов для выполнения комплексных задач разработки.
Разработка через тестирование (TDD)
Методология создания ПО, при которой сначала пишутся тесты, а затем код, проходящий эти тесты.
Кэш-дружественность (Cache friendliness)
Свойство алгоритмов и структур данных оптимально использовать быструю процессорную кэш-память.
Бойлерплейт (Boilerplate)
Повторяющиеся фрагменты кода, необходимые для реализации стандартных функций или тестов.
Мультимодальность
Способность ИИ-модели одновременно обрабатывать информацию разных типов, например текст и изображения.
📊 Цифры
⚖️ Другая сторона
Технологии и IT Митчелл Хашимото Эмулятор Ghosty Язык программирования Zig Разработка через тестирование Claude Code